我第一次使用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
你正在使用什麼PDFBox版本?這個bug在2015年底被修復(https://issues.apache.org/jira/browse/PDFBOX-1512)。它與jdk7(或更高版本)的使用有關。 –
@Tilman「這與使用jdk7有關」 - 嚴格來說,這是由於比較法不符合比較合同。儘管java 6沒有抱怨,但即便如此,它仍然是一個bug。 – mkl