2016-10-03 63 views
0

我有http://laws-lois.justice.gc.ca/PDF/A-8.8.pdf,我試圖解析使用PDFBox,它有2列。我希望解析文本以便分隔列,但是當我通過PDFBox運行它時,它不會分隔2列,而是將兩列的行連接在一起。PDFBox 2列問題如何檢查珠

我讀過https://issues.apache.org/jira/browse/PDFBOX-448,其中說一些PDF文件/珠子沒有可用的,所以解析總是錯誤的。我試過使用stripper.setShouldSeparateByBeads(true)

我該如何檢查它是否有珠子?除了關於PDFBox列解析的問題外,我還沒有發現任何關於這個概念的閱讀材料。

回答

1

您可以檢查珠子是否在PDPage.getThreadBeads()的頁面中。如果沒有線珠,這將返回一個空列表。

擾流警報:您的文檔沒有任何內容。

有關如何使用它們的示例,請參閱源代碼下載中的DrawPrintTextLocations.java示例。帶有磁珠的PDF文件的示例可以在文件PDFBOX-3110-003422-p1-beads.pdfPDFBOX-3110-poems-beads.pdf中找到,也可以在源代碼下載中找到。

獎金提示:看看ExtractTextByArea.java的例子,這應該會幫助你提取你的PDF文件。

+0

謝謝,這對我有效。我還發現PDFParser的writeString可以被覆蓋,並且在函數內部,列被讀作兩組文本。我可以手動保存我在那裏獲得的文本,這與使用PDFTextStripperByArea有點相似。你如何看待這條道路?我想知道是否有一些明顯的缺點(文本可能會分裂,當它不應該?)。 – kyl

+0

我假設你的意思是PDFStripper,而不是PDFParser。是的,你可以做到這一點...文本的順序取決於PDF,即它沒有任何「邏輯」,即從左到右,按列或其他排序,可能是任何東西,所以要小心檢查你的假設正在起作用。如果我是你,只要它完成工作,我就會留在PDFTextStripperByArea中。 –

+0

感謝您的諮詢!大多數情況下,我希望能夠自動檢測它的2列或3列,所以這就是爲什麼writeString()比手動設置矩形邊界更有用。 – kyl