Надежное обнаружение переполнения текста в текстовых фреймах в InDesign Server с использованием сценариев javascript?

StackOverflow https://stackoverflow.com/questions/1083194

Вопрос

В данный момент я создаю некоторые сценарии Javascript с InDesign Server.У меня возникают проблемы при попытке надежно обнаружить переполнения в текстовых фреймах после изменения форматирования или размещения в них XML.

Например, у меня есть функция, которая уменьшает высоту текстового фрейма в 4 столбца до тех пор, пока текст не переполнит фрейм.Затем он увеличивает высоту до тех пор, пока она больше не перестанет переливаться через край.Это должно привести к тому, что высота столбцов будет как можно ближе к равной.

while(!bodyTextFrame.overflows) {
  var bounds = bodyTextFrame.geometricBounds;
  bodyTextFrame.geometricBounds = [bounds[0], bounds[1], bounds[2] - 1, bounds[3]];
  //app.consoleout("shrinking");
}

while(bodyTextFrame.overflows) {
  var bounds = bodyTextFrame.geometricBounds;
  bodyTextFrame.geometricBounds = [bounds[0], bounds[1], bounds[2] + 1, bounds[3]];
  //app.consoleout("expanding");
}

В InDesign desktop это работает нормально (с некоторыми изменениями, позволяющими использовать выбранный в данный момент объект), но в InDesign Server это, похоже, выходит за рамки на этапе сжатия, а затем расширяется только один раз.

Аналогичная проблема также возникает после помещения XML в текстовый фрейм и последующего определения того, вызвал ли этот текст переполнение.Если я проверяю переполнение непосредственно после placeXML(), оно всегда возвращает false, но если я проверяю переполнение в более поздней части скрипта, оно обнаруживает его правильно.

Это немного похоже на задержку вычисления переполнения текста, но это продолжается в скрипте независимо от того, пока свойство overflow не будет обновлено в текстовом фрейме.

Есть ли способ заставить скрипт ждать, пока свойство overflow не будет обновлено?Или настройка режима скрипта на ожидание обновления?Или я просто делаю это неправильно?

Это было полезно?

Решение 2

Итак, оказывается, что это было вызвано побочным эффектом того, как был структурирован мой XML.XML, который я применял к текстовому фрейму, содержал ряд <p> теги, которые, казалось, сбивали с толку механизм верстки при оценке переполнений.Я запустил свой XML-файл с помощью скрипта, чтобы заменить теги на &#x2029; (символ разделителя абзацев), и теперь это работает нормально.

Другие советы

Как вы обнаружили, композиция - это отложенная задача.Большинство действий по написанию сценариев, требующих корректной композиции, будут выполняться автоматически, но иногда вам приходится использовать метод recompose(), например

myDocument.recompose()
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top