2012-04-02 61 views
4

這似乎是一個老問題,但我沒有找到花半小時尋遍打完一個詳盡的答案。提取與路線的位置的所有文本從PDF

我使用PDFBox的,我願與每個字符串的座標沿着提取所有文字從一個PDF文件。我使用他們的PrintTextLocations例子(http://pdfbox.apache.org/apidocs/org/apache/pdfbox/examples/util/PrintTextLocations.html),但那種PDF我在用的(電子機票)的程序無法識別字符串,分別打印每個字符。輸出是一個字符串列表(每個代表TextPosition對象)是這樣的:

String[414.93896,637.2442 fs=1.0 xscale=8.0 height=4.94 space=2.2240002 width=4.0] s 
String[418.93896,637.2442 fs=1.0 xscale=8.0 height=4.94 space=2.2240002 width=4.447998] a 
String[423.38696,637.2442 fs=1.0 xscale=8.0 height=4.94 space=2.2240002 width=1.776001] l 
String[425.16296,637.2442 fs=1.0 xscale=8.0 height=4.94 space=2.2240002 width=4.447998] e 

雖然我想程序才能識別字符串「銷售」作爲一個獨特的TextPosition,並給我自己的立場。我也嘗試玩setSpacingTolerance()setAverageCharacterTolerance()PDFTextStripper方法,在標準值(分別爲FYI分別爲0.5和0.3)上設置不同的值,但輸出完全沒有變化。我哪裏錯了?提前致謝。

+1

啊,PDF的樂趣。根據創建的內容,「text」可能只是某些位置上的字形集合,所以您必須根據位置進行猜測以找出字詞和空格的位置。 – Joey 2012-04-02 12:09:53

回答

4

至於喬伊提到,PDF只是一個指令,告訴您應打印某個字符集。

爲了提取的詞或行,你將不得不執行一些數據分割:研究的字符的邊界框應該讓你認識那些在相同的行,然後其中一個形式的話。

+1

感謝您的回覆。這就是我最終做的:爲每個PDF「模板」創建一組矩形,並將其應用於基於位置提取文本部分。這需要大量的手工工作來維持,但它似乎是唯一可靠的方法。 – 2012-06-04 13:31:55