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

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

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

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

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

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

The problem is that this text does not seem to be in order. I have a simple IDML file, where i have one text frame for the title, and one textframe covers the contents of the page. When I extract, the body part ifs fetched first, and then the header.

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

Спасибо.

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


person divyanshm    schedule 01.03.2013    source источник


Ответы (1)


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

Единственный способ определить порядок чтения так, как я думаю, вы хотите, - это выяснить положение элементов на странице (предположительно, как только вы это узнаете, вы можете работать сверху вниз и / или слева направо или даже справа налево в зависимости от языка). Это может быть немного сложно, но в основном это сумма параметров GeometricBounds и ItemTransform иерархии Spread > Page > PageItem. Подробнее см. мой ответ здесь: https://stackoverflow.com/a/12490600/1014822

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

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

person Jude Fisher    schedule 01.03.2013
comment
Я извлекаю текст из файла IDML, как вы упомянули. Если у вас есть представление об этом, пожалуйста, помогите мне - могу ли я с уверенностью предположить, что развороты в документе расположены в том же порядке, что и в файле designmap. - person divyanshm; 11.03.2013
comment
Раздел IDML в SO будет улучшен, если вы зададите этот тип вещей как отдельный вопрос, но да, порядок разворотов определяется порядком их появления в карте дизайна. - person Jude Fisher; 11.03.2013