Избранное »

22.09.2014 – 07:27 | 2 комментария | 8 458 views

Здравствуйте все, кто работает в Индизайне!
Извещаем вас о том, что на youtube.com начал работу канал «InDesign Мастерская вёрстки». Там уже размещены более 60 видео с полным описанием как работать с программой DoTextOK. Другие интересные темы, касающиеся работы …

Читать полностью »
Работа в InDesign

Хитрости и секреты, приемы работы, уроки

Новая версия!

Особенности новой версии Индизайна

Плагины

Описание плагинов, информация о плагинах для работы с Adobe InDesign

Скрипты

Готовые к использованию скрипты для Adobe InDesign

Скриптинг

Описание языка, приёмов и методов программирования для Adobe InDesign

Home » Скрипты

Export All Stories Script

Добавлено на 14.10.2008 – 22:583 комментария | 459 views

В составе стандартной поставки скриптов к InDesign CS3 есть скрипт ExportAllStories, который сохраняет тексты всех Story в текстовые файлы. При этом количество получившихся текстовых файлов будет равно количеству Story в документе.

Olav Kvern разработал скрипт, который сохраняет весь текст из вашего документа в один единственный  текстовый файл. При этом можно выбрать формат (txt, rtf, tagged text) и отметить, нужен ли разделитель между текстами разных Story.

Скрипт буден полезен, когда надо быстро весь текст из файла Индизайна перебросить в другие программы.

//ExportAllText.jsx
//An InDesign CS3 JavaScript
//
//Exports all of the text in the active document as a single
//text file. To do this, the script will create a new document,
//combine the stories in the new document using export/import,
//and then export the text from the new document.
if(app.documents.length != 0){
if(app.documents.item(0).stories.length != 0){
myGetFileName(app.documents.item(0).name);
}
}
function myGetFileName(myDocumentName){
var myFilePath = File.saveDialog(«Save Exported File As:»);
if(myFilePath != null){
myDisplayDialog(myDocumentName, myFilePath);
}
}
function myDisplayDialog(myDocumentName, myFilePath){
//Need to get export format, story separator.
var myExportFormats = [«Text Only», «Tagged Text», «RTF»];
var myDialog = app.dialogs.add({name:»ExportAllStories»});
with(myDialog.dialogColumns.add()){
with(dialogRows.add()){
with(dialogColumns.add()){
var myExportFormatDropdown = dropdowns.add({stringList:myExportFormats, selectedIndex:0});
}
}
with(dialogRows.add()){
var myAddSeparatorCheckbox = checkboxControls.add({staticLabel:»Add separator line», checkedState:true});
}
}
var myResult = myDialog.show();
if(myResult == true){
var myExportFormat = myExportFormats[myExportFormatDropdown.selectedIndex];
var myAddSeparator = myAddSeparatorCheckbox.checkedState;
myDialog.destroy();
myExportAllText(myDocumentName, myFilePath, myExportFormat, myAddSeparator);
}
else{
myDialog.destroy();
}
}
function myExportAllText(myDocumentName, myFilePath, myExportFormat, myAddSeparator){
var myStory;
var myTempFolder = Folder.temp;
var myTempFile = File(myTempFolder + «/tempTextFile.txt»);
var myNewDocument = app.documents.add();
var myDocument = app.documents.item(myDocumentName);
var myTextFrame = myNewDocument.pages.item(0).textFrames.add({geometricBounds:myGetBounds(myNewDocument, myNewDocument.pages.item(0))});
var myNewStory = myTextFrame.parentStory;
for(myCounter = 0; myCounter < myDocument.stories.length; myCounter++){
myStory = myDocument.stories.item(myCounter);
//Export the story as tagged text.
myStory.exportFile(ExportFormat.taggedText, myTempFile);
//Import (place) the file at the end of the temporary story.
myNewStory.insertionPoints.item(-1).place(myTempFile);
//If the imported text did not end with a return, enter a return
//to keep the stories from running together.
if(myCounter != myDocument.stories.length -1){
if(myNewStory.characters.item(-1).contents != «\r»){
myNewStory.insertionPoints.item(-1).contents = «\r»;
}
if(myAddSeparator == true){
myNewStory.insertionPoints.item(-1).contents = «—————————————-\r»;
}
}
}
switch(myExportFormat){
case «Text Only»:
myFormat = ExportFormat.textType;
myExtension = «.txt»
break;
case «RTF»:
myFormat = ExportFormat.RTF;
myExtension = «.rtf»
break;
case «Tagged Text»:
myFormat = ExportFormat.taggedText;
myExtension = «.txt»
break;
}
myNewStory.exportFile(myFormat, File(myFilePath));
myNewDocument.close(SaveOptions.no);
myTempFile.remove();
}
function myGetBounds(myDocument, myPage){
var myPageWidth = myDocument.documentPreferences.pageWidth;
var myPageHeight = myDocument.documentPreferences.pageHeight
if(myPage.side == PageSideOptions.leftHand){
var myX2 = myPage.marginPreferences.left;
var myX1 = myPage.marginPreferences.right;
}
else{
var myX1 = myPage.marginPreferences.left;
var myX2 = myPage.marginPreferences.right;
}
var myY1 = myPage.marginPreferences.top;
var myX2 = myPageWidth — myX2;
var myY2 = myPageHeight — myPage.marginPreferences.bottom;
return [myY1, myX1, myY2, myX2];
}

Скопируйте отсюда текст скрипта в текстовый редактор (например, блокнот) и сохраните его с именем ExportAllText.jsx в папку пользовательских скриптов Индизайна.

Скрипт сохраняет свою работоспособность и в версии InDesign CS2, и может применяться как на платформе Windows, так и на Mac.


Примечание: Задачу сохранения текста в текстовый файл можно решить при помощи бесплатного скриптового плагина фирмы Rorohiko — см. http://www.rorohiko.com/textexporter.html

3 комментария »

  • Maxbor:

    Экспорт работает отлично и весьма быстро. Это возможно потому, что сначала все материалы собираются в один материал, а он уже экспортируется в один файл требуемого формата.
    В листинге на сайте допущены ошибки: местами непарные кавычки заменились парными кавычками-лапками. В этих местах интерпретатор ругается на синтаксис. Исправление формы кавычек в тексте скрипта решает проблему полностью.

  • admin:

    Пока выясняются причины такого неожиданного поведения кавычек добавил ссылку на скачивание

  • AntonSam:

    Скрипт очень нужный. Странно, что несколько лет в этом направлении нет никакого развития.
    Часто возникает необходимость экспорта из ИнДи, а приемлемого решения не знаю.

    Возможно ли этот скрипт доделать, чтобы он склеивал материалы в том порядке, как они идут в публикации, а не по времени создания?
    И чтоб в CS4 работал?

Оставить комментарий!

Вы должны быть в системе чтобы оставить комментарий.