IDML: извлекать текстовое содержимое в правильном порядке
Я пытаюсь извлечь текстовое содержимое из файлов IDML.
Что я сейчас делаю -
Извлеките XML-файлы, перейдите к
designmap.xml
файл и найдите спреды, составляющие документ.Спреды - это элементы в designmap.xml, определенные как::
- В каждом спреде я ищу
<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 имеет концепцию Layer
s, что еще больше усложняет проблему глубины.
NextTextFrame
а также PreviousTextFrame
используются только для связанных кадров, когда история перемещается из одного кадра в другой. Значение N
указывает, что в этом направлении нет связанной рамки.