J'utilise PDF Box pour la première fois et je l'utilise pour extraire du texte d'une certaine région du PDF. J'ai testé mon programme sur 50 documents et il a échoué sur 4 documents et m'a donné cette exception. Quelqu'un peut-il donner plus de lumière à ce sujet? Ou sait ce qui provoque cela?Exception d'extraction de texte Pdfbox
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);
Message d'erreur
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)
L'un des fichiers qui donne cette exception: https://files.fm/u/6srrrzxq
Quelle version de PDFBox utilisez-vous? Ce bug a été corrigé à la fin de l'année 2015 (https://issues.apache.org/jira/browse/PDFBOX-1512) Il est lié à l'utilisation de jdk7 (ou supérieur). –
@Tilman "Il est lié à l'utilisation de jdk7" - bien, à proprement parler, il est dû à un comparateur qui n'adhère pas au contrat comparateur. Même si java 6 ne s'est pas plaint, c'était un bug même alors. – mkl