2013-03-01 2 views
1

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

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

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

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

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

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

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

Спасибо.

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

ответ

3

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

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

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

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

+0

Я извлекаю текст из файла IDML, как вы упомянули. Если у вас есть идея об этом, пожалуйста, помогите мне - могу ли я смело предположить, что спреды в документе расположены в том же порядке, в каком они указаны в файле designmap. – divyanshm

+1

Раздел IDML SO будет улучшен, если вы зададите этот вопрос как отдельный вопрос, но да, порядок спредов определяется порядком, который они отображаются в схеме проектирования. – JcFx

Смежные вопросы