1

我正在尝试从 IDML 文件中提取文本内容。

我目前正在做的是-

  1. 提取 xml 文件,转到designmap.xml文件并查找构成文档的价差。

  2. Spreads 是 designmap.xml 中的元素,定义为 ::

  3. 在每个展开中,我查找元素,并从属性<TextFrame>中获取相应的内容ParentStory

问题是这个文本似乎没有顺序。我有一个简单的 IDML 文件,其中我有一个标题文本框,一个文本框覆盖页面的内容。当我提取时,首先提取正文部分,然后提取标题。

有什么方法可以按照我们可以看到的相同顺序提取内容?

谢谢。

PS - 在元素中,NextFrame 和 PreviousFrame 属性都设置为“n”。我不确定这意味着什么,这些价值观是否能有所帮助。抱歉,如果我在这里遗漏了一些非常基本的东西,我是设计和 IDML 的新手。

4

1 回答 1

3

TextFrameIDML中元素的顺序Spread表示它们的 z 顺序深度,而不是页面上的任何阅读顺序。在您描述的文档中,要么操纵了深度,要么在标题之前将正文元素添加到文档中:无论哪种方式,它的深度都较低。

以我认为您想要的方式确定阅读顺序的唯一方法是找出页面上元素的位置(大概一旦您知道这一点,您就可以从上到下和/或从左到右,甚至从右到左工作取决于语言)。这可能有点棘手,但基本上是 >> 层次结构的和参数GeometricBoundsItemTransform总和。有关更多详细信息,请参见我的答案:https ://stackoverflow.com/a/12490600/1014822SpreadPagePageItem

或者,如果您可以控制文档创作过程,您可以确保作者使用深度来指示阅读顺序,这将为您节省一些编码。但请注意,IDML 也有Layers 的概念,这使深度问题进一步复杂化。

NextTextFrame并且PreviousTextFrame仅用于链接框架,当故事从一个框架流向另一个框架时。值N表示该方向上没有链接框架。

于 2013-03-01T18:23:28.277 回答