2013-03-01 79 views
1

我试图从IDML文件中提取文本内容。IDML:以正确的顺序提取文本内容

什么,我现在做的是 -

  1. 提取XML文件,去designmap.xml文件并寻找弥补该文档的价差。

  2. 点差是在designmap.xml元素,定义为::

  3. 在每个扩频,我寻找<TextFrame>元件,并且取从ParentStory属性对应的内容

问题在于这段文字似乎没有按顺序排列。我有一个简单的IDML文件,其中我有一个标题的文本框架,一个文本框架覆盖了页面的内容。当我提取时,身体部分如果首先获取,然后是头部。

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

谢谢。

PS - 在元素中,NextFrame和PreviousFrame属性都设置为'n'。我不确定这意味着什么,这些价值可以帮助你。如果我错过了一些非常基本的东西,我很抱歉,我是新来的设计和IDML。

回答

3

IDML Spread中的TextFrame元素的顺序表示它们的z顺序深度,而不是页面上的任何种类的阅读顺序。在你描述的文档中,无论是深度操作,还是将body元素添加到文档之前的文档中:无论哪种方式,文档都处于较低的深度。

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

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

NextTextFramePreviousTextFrame仅用于链接帧,当故事从一帧流向另一帧时。值为N表示在该方向上没有链接的帧。

+0

我从你提到的IDML文件中提取文本。如果您有关于这一点的想法,请帮助我 - 我可以有把握地认为文件中的价差排列顺序相同,因为它们是在designmap文件中提及。 – divyanshm 2013-03-11 12:03:27

+1

如果您将这种类型的问题作为单独的问题提出,SO的IDML部分将得到改进 - 但是,差异顺序取决于它们在设计图中出现的顺序。 – JcFx 2013-03-11 13:21:03