IDML: извлекать текстовое содержимое в правильном порядке

Я пытаюсь извлечь текстовое содержимое из файлов IDML.

Что я сейчас делаю -

  1. Извлеките XML-файлы, перейдите к designmap.xml файл и найдите спреды, составляющие документ.

  2. Спреды - это элементы в designmap.xml, определенные как::

  3. В каждом спреде я ищу <TextFrame> элементы, и получить соответствующий контент из ParentStory атрибут

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

Есть ли способ извлечь содержимое в том же порядке, в котором мы его видим?

Благодарю.

PS - В элементе атрибуты NextFrame и PreviousFrame оба имеют значение "n". Я не уверен, что это значит, и могут ли эти значения как-то помочь. Извиняюсь, если я упускаю что-то очень простое здесь, я новичок в дизайне и IDML.

1 ответ

Решение

Получатель чего-то TextFrame элементы в IDML Spread указывает глубину z-порядка, а не порядок чтения на странице. В документе, который вы описываете, либо глубина была изменена, либо элемент body был добавлен в документ перед заголовком: в любом случае он находится на более низкой глубине.

Единственный способ определить порядок чтения так, как я думаю, вы хотите, это выяснить положение элементов на странице (предположительно, когда вы знаете это, вы можете работать сверху вниз и / или слева направо, или даже справа налево в зависимости от языка). Это может быть немного сложно, но в основном это сумма GeometricBounds а также ItemTransform параметры Spread > Page > PageItem иерархия. Смотрите мой ответ здесь для более подробной информации: /questions/21324014/opredelit-koordinatyi-dlya-vizualnogo-elementa-v-idml/21324016#21324016

В качестве альтернативы, если у вас есть контроль над процессом создания документа, вы можете убедиться, что авторы используют глубину, чтобы указать порядок чтения, что сэкономит вам немного кода. Но обратите внимание, что IDML имеет концепцию Layers, что еще больше усложняет проблему глубины.

NextTextFrame а также PreviousTextFrame используются только для связанных кадров, когда история перемещается из одного кадра в другой. Значение N указывает, что в этом направлении нет связанной рамки.

Другие вопросы по тегам