Adobe InDesign зависает на неопределенный срок, когда я пытаюсь дублировать страницы с помощью ExtendScript

У меня есть очень простой сценарий ExtendScript, который создает новый документ из подмножества текущего активного документа:

var sourceDocument = app.activeDocument;
var i, j;

for(i = 0; i < sourceDocument.layers.length; i++) {
  sourceDocument.layers.item(i).locked = false;
}
for(i = 0; i < sourceDocument.spreads.length; i++) {
  for(j = 0; j < sourceDocument.spreads.item(i).textFrames.length; j++) {
    if(sourceDocument.spreads.item(i).textFrames.item(j).locked) {
      sourceDocument.spreads.item(i).textFrames.item(j).locked = false;
    }
  }
}

var destDocument = app.documents.add();
var firstPageIndex = 0; // In the actual script, this is chosen by the user.
var lastPageIndex = 5; // In the actual script, this is chosen by the user.

destDocument.importStyles(ImportFormat.paragraphStylesFormat, new File(sourceDocument.filePath + "/" + sourceDocument.name), GlobalClashResolutionStrategy.LOAD_ALL_WITH_OVERWRITE);
destDocument.importStyles(ImportFormat.characterStylesFormat, new File(sourceDocument.filePath + "/" + sourceDocument.name), GlobalClashResolutionStrategy.LOAD_ALL_WITH_OVERWRITE);
destDocument.viewPreferences.horizontalMeasurementUnits = sourceDocument.viewPreferences.horizontalMeasurementUnits;
destDocument.viewPreferences.verticalMeasurementUnits = sourceDocument.viewPreferences.verticalMeasurementUnits;
destDocument.documentPreferences.facingPages = sourceDocument.documentPreferences.facingPages;
destDocument.documentPreferences.pageHeight = sourceDocument.documentPreferences.pageHeight;
destDocument.documentPreferences.pageWidth = sourceDocument.documentPreferences.pageWidth;
destDocument.documentPreferences.pageSize = sourceDocument.documentPreferences.pageSize;
destDocument.documentPreferences.allowPageShuffle = true;

var range = sourceDocument.pages.itemByRange(firstPageIndex, lastPageIndex);
range.duplicate(LocationOptions.AFTER, destDocument.pages[destDocument.pages.length - 1]);
destDocument.pages[0].remove(); // An empty spread containing an empty page is added when the new document is created and we cannot remove it before other pages are inserted (Documents must have at least one page)

Этот скрипт отлично работает со многими документами. Но когда я выполняю его для одного конкретного документа (назовем его foo.indd), InDesign перестает отвечать на запросы при выполнении дублирования: range.duplicate(LocationOptions.AFTER, destDocument.pages[destDocument.pages.length - 1]);. С тех пор единственное, что я могу сделать, это заставить InDesign выйти.

Это ошибка InDesign? Как я могу найти, какая часть этого конкретного документа создает проблему?


person Shawn    schedule 06.06.2012    source источник


Ответы (2)


Я не могу сказать, что не так в вашем примере, но если indesign зависает, это может быть вызвано циклами (до бесконечности и выше :))

Таким образом, вы можете попытаться избежать проблем, выведя ограничение цикла, чтобы избежать повторного расчета InDesign.

var limit = …
for ( i = 0; i<limit ; i++)…

Кроме того, вы можете попытаться написать информацию на консоли, чтобы получить информацию о том, где InDesign фактически зависает. Так что записывайте информацию на лету в файл отчета, и вы, наконец, сможете определить проблемную область.

Кроме того, вы можете попытаться опросить все ключевые элементы, чтобы увидеть, есть ли в файле какие-либо проблемы.

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

person Loic    schedule 06.06.2012
comment
Проблема возникает при использовании функции duplicate; это не петли. Пройти через IDML - хорошая идея, попробую. Я не понимаю, что вы подразумеваете под опросом всех ключевых элементов, чтобы увидеть, есть ли в файле какие-то проблемы. Не могли бы вы объяснить эту идею немного подробнее? - person Shawn; 07.06.2012
comment
Экспорт в IDML и повторный импорт не решают проблему. - person Shawn; 07.06.2012
comment
Я рад, что это решило проблему. Говоря о ключевых элементах, я имел в виду получить информацию об определенных частях кода, в которых могут возникнуть проблемы. - person Loic; 13.06.2012
comment
На самом деле, это не решило проблему. Я до сих пор не нашел, почему возникает проблема, но я проверил документ насквозь, просмотрев все его свойства и сравнив их с другим (рабочим) документом. - person Shawn; 14.06.2012
comment
Привет, мой плохой, я прочитал слишком быстро: D Я еще раз посмотрю на это. - person Loic; 19.06.2012

Попробуйте этот скрипт на вашем проблемном файле. Если это не удается, взгляните на отчет, который должен быть сгенерирован на рабочем столе.

http://www.loicaigon.com/downloads/cloneDocument.jsx

Лоик http://www.loicaigon.com

person Loic Aigon    schedule 19.06.2012
comment
Я получаю справочную ошибку: Недопустимый объект и это в report.txt: Запуск main(), вызов cloneDocument(), вход в cloneDocument(), Разблокировка всех слоев pageWidth применение pageSize применение allowPageShuffle Получение страниц по диапазону Дублирование страниц - person Shawn; 20.06.2012