Ich verwende PDF Box zum ersten Mal und ich verwende es, um Text aus einer bestimmten Region der PDF zu extrahieren. Ich testete mein Programm auf 50 Dokumenten und es scheiterte an 4 Dokumenten und gab mir diese Ausnahme. Kann jemand mehr Licht darauf werfen? Oder weiß, was das verursacht?Pdfbox Text Extraction Exception
-Code
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);
Fehlermeldung
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)
Eine der Dateien, die diese Ausnahme gibt: https://files.fm/u/6srrrzxq
Welche PDFBox-Version verwenden Sie? Dieser Fehler wurde Ende 2015 behoben (https://issues.apache.org/jira/browse/PDFBOX-1512). Er hängt mit der Verwendung von jdk7 (oder höher) zusammen. –
@Tilman "Es hängt mit der Verwendung von jdk7 zusammen" - genau genommen liegt es an einem Komparator, der sich nicht an den Vergleichsvertrag hält. Obwohl Java 6 sich nicht beschwerte, war es schon damals ein Bug. – mkl