2017-08-15 68 views
1

我第一次使用PDF Box,我使用它從PDF的某個區域提取文本。 我在50個文檔上測試了我的程序,並且在4個文檔上失敗了,並給了我這個例外。 有人可以對此有更多的瞭解嗎?或者知道是什麼導致它發生?Pdfbox文本提取異常

代碼

PDFTextStripperByArea stripper = new PDFTextStripperByArea(); 
stripper.setSortByPosition(true); 
Rectangle rect = new Rectangle(0 , 58 , 612 , 657); 
stripper.addRegion("region", rect); 
List allPages = document.getDocumentCatalog().getAllPages(); 

for(i=0 ; i<document.getNumberOfPages() ; i++) 
{ 
    stripper.extractRegions((PDPage)allPages.get(i)); 
    FileText += stripper.getTextForRegion("region"); 
} 

System.out.println(FileText); 

錯誤消息

Exception in thread "main" java.lang.IllegalArgumentException: Comparison method violates its general contract! 
    at java.util.TimSort.mergeHi(TimSort.java:899) 
    at java.util.TimSort.mergeAt(TimSort.java:516) 
    at java.util.TimSort.mergeForceCollapse(TimSort.java:457) 
    at java.util.TimSort.sort(TimSort.java:254) 
    at java.util.Arrays.sort(Arrays.java:1512) 
    at java.util.ArrayList.sort(ArrayList.java:1454) 
    at java.util.Collections.sort(Collections.java:175) 
    at org.apache.pdfbox.util.PDFTextStripper.writePage(PDFTextStripper.java:554) 
    at org.apache.pdfbox.util.PDFTextStripperByArea.writePage(PDFTextStripperByArea.java:190) 
    at org.apache.pdfbox.util.PDFTextStripper.processPage(PDFTextStripper.java:446) 
    at org.apache.pdfbox.util.PDFTextStripperByArea.extractRegions(PDFTextStripperByArea.java:153) 
    at pdf.box.App.main(App.java:68) 

其中的一個文件,讓這個異常:https://files.fm/u/6srrrzxq

+1

你正在使用什麼PDFBox版本?這個bug在2015年底被修復(https://issues.apache.org/jira/browse/PDFBOX-1512)。它與jdk7(或更高版本)的使用有關。 –

+0

@Tilman「這與使用jdk7有關」 - 嚴格來說,這是由於比較法不符合比較合同。儘管java 6沒有抱怨,但即便如此,它仍然是一個bug。 – mkl

回答

0

切換到新的版本...它現在的工作... 謝謝!

+1

您寫過「我第一次使用PDF Box」 - 因此我想知道,哪個網站指示您使用至少2年的版本? –

+0

複製舊依賴項,因爲它位於結果之上 –

相關問題