2013-03-01 77 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