2017-08-15 1 views
1

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

+1

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. –

+0

@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

Antwort

0

auf eine neuere Version Switched ... seine Arbeit jetzt ... Vielen Dank!

+1

Sie haben geschrieben: "Ich benutze PDF Box zum ersten Mal" - also frage ich mich, welche Website Sie dazu bewogen hat, eine Version zu benutzen, die mindestens 2 Jahre alt ist? –

+0

Kopierte die alte Abhängigkeit, weil sie über den Ergebnissen lag –