Как найти номер страницы статьи в документе IDML?

#xml #adobe #idml

#xml #adobe #idml

Вопрос:

Я новичок в IDML document, и мне было интересно, как можно найти номер страницы конкретной истории. Spread_XXXX.xml содержит элементы страницы, которые в основном описывают, сколько страниц находится в развороте, и текстовый фрейм, который ссылается на историю. Однако я не смог найти никакой связи между ними.

Комментарии:

1. Я не знаю IDML (я использую InDesign), но беглое изучение спецификации, похоже, указывает на то, что IDML отделяет макет от содержимого. Это означало бы, что страница, на которой что-то появляется, неизвестна до тех пор, пока содержимое не будет отображено в определенном макете.

2. но разве при рендеринге контента не будет использоваться какая-то базовая логика для сопоставления историй с определенным номером страницы и их соответствующего отображения?

3. Да, и вам пришлось бы дублировать эту логику, поскольку результат не сохраняется в файле IDML.

Ответ №1:

Я знаю, что немного опаздываю на вечеринку, но, возможно, ответ будет полезен кому-то еще.

Хотя ход ваших мыслей отчасти верен (текстовый фрейм находится на странице), реальность в InDesign / IDML совершенно иная. Фактическая зависимость выглядит следующим образом (упрощенно):

 Document:
|
|-Spread
  |
  |-Page
  |-Page
  |-TextFrame
  |-TextFrame
  |-Rectangle... and so on
  

Как вы можете видеть, текстовый фрейм — это не дочерний элемент страницы, а разворот. Это относительно системы координат spread.

И это отчасти имеет смысл. Изображение у вас есть макет, подобный этому:

 |________Spread___________|
|___Page 1___|___Page 2___|
|       |__Text 1__|      |
|       |          |      |
|       |__________|      |
|____________|____________|
  

Вопрос в том, на какой странице находится Text 1 ? На самом деле вы не можете ответить на этот вопрос. Все, что вы могли бы сделать, это выяснить, находится ли угол текстового фрейма в пределах ограничивающей рамки определенной страницы.

Цитирование кулинарной книги IDML:

По умолчанию элементы страницы находятся в координатах распространения. Начало координат находится в центральной точке привязки страницы. Часто проще работать в координатах страницы. Этого можно достичь в IDML, настроив матрицу ItemTransform элемента страницы. Концептуально, это вопрос перемещения начала координат из центральной точки разворота в верхний левый угол страницы следующим образом:

  1. Определите местоположение привязки страницы на основе нуля, как описано выше.
  2. Определите индекс страницы на основе нуля.
  3. Определите ширину страницы.
  4. Определите высоту страницы.
  5. Вычислите перевод по x (или по горизонтали) следующим образом: xTranslation = (pageIndex — привязка страницы) * Ширина страницы
  6. Вычислите перевод по y (или вертикали) следующим образом: yTranslation = высота страницы / 2
  7. Добавьте yTranslation.

Например, следующий текстовый фрейм находится на странице слева от привязки; следовательно, он преобразуется по горизонтали на 612 пунктов и по вертикали на 396 пунктов. Это перемещает начало координат из центра привязки влево на 612 пунктов и вверх на 396 пунктов.

 <TextFrame ... ItemTransform="1 0 0 1 -612 -396">
...
<PathPointArray>
<PathPointType Anchor="36 36" LeftDirection="36 36"
RightDirection="36 36"/>
...