2017-03-09 10 views
2

Ich bekomme die folgenden Fehler beim Versuch, PDF (XFA) in Zeichenfolge zu konvertieren. Diese Fehler begann kommen, wenn ich von PDFBox 1.8.12 zu PDFBox 2.0.4 geschaltetPDFBox 2.0.4: XFA zu Textfehler

Hier wird das Protokoll

Mar 09, 2017 7:16:07 AM org.apache.pdfbox.pdfparser.BaseParser parseCOSArray 
WARNING: Corrupt object reference at offset 779916 
Mar 09, 2017 7:16:07 AM org.apache.pdfbox.pdfparser.BaseParser parseCOSArray 
WARNING: Corrupt object reference at offset 780049 
Mar 09, 2017 7:16:07 AM org.apache.pdfbox.pdfparser.BaseParser parseCOSArray 
WARNING: Corrupt object reference at offset 780074 
java.io.IOException: Unknown dir object c='>' cInt=62 peek='>' peekInt=62 at offset 780074 
    at org.apache.pdfbox.pdfparser.BaseParser.parseDirObject(BaseParser.java:951) 
    at org.apache.pdfbox.pdfparser.BaseParser.parseCOSArray(BaseParser.java:651) 
    at org.apache.pdfbox.pdfparser.BaseParser.parseDirObject(BaseParser.java:866) 
    at org.apache.pdfbox.pdfparser.BaseParser.parseCOSDictionaryValue(BaseParser.java:150) 
    at org.apache.pdfbox.pdfparser.BaseParser.parseCOSDictionaryNameValuePair(BaseParser.java:274) 
    at org.apache.pdfbox.pdfparser.BaseParser.parseCOSDictionary(BaseParser.java:207) 
    at org.apache.pdfbox.pdfparser.BaseParser.parseDirObject(BaseParser.java:854) 
    at org.apache.pdfbox.pdfparser.COSParser.parseFileObject(COSParser.java:772) 
    at org.apache.pdfbox.pdfparser.COSParser.parseObjectDynamically(COSParser.java:741) 
    at org.apache.pdfbox.pdfparser.COSParser.parseObjectDynamically(COSParser.java:672) 
    at org.apache.pdfbox.pdfparser.COSParser.parseDictObjects(COSParser.java:632) 
    at org.apache.pdfbox.pdfparser.PDFParser.initialParse(PDFParser.java:217) 
    at org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:252) 

und

java.io.IOException: Wrong type of referenced length object COSObject{7, 0}: COSDictionary 
    at org.apache.pdfbox.pdfparser.COSParser.getLength(COSParser.java:907) 
    at org.apache.pdfbox.pdfparser.COSParser.parseCOSStream(COSParser.java:949) 
    at org.apache.pdfbox.pdfparser.COSParser.parseFileObject(COSParser.java:780) 
    at org.apache.pdfbox.pdfparser.COSParser.parseObjectDynamically(COSParser.java:741) 
    at org.apache.pdfbox.pdfparser.COSParser.parseObjectDynamically(COSParser.java:672) 
    at org.apache.pdfbox.pdfparser.COSParser.parseDictObjects(COSParser.java:632) 
    at org.apache.pdfbox.pdfparser.PDFParser.initialParse(PDFParser.java:217) 
    at org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:252) 
    at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:966) 
    at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:922) 
    at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:870) 

ich die Migration lesen und Last statt loadNonSeq verwendet, weil jetzt PDFBox Griffe das intern.

Alle Vorschläge zur Behebung dieser Fehler.

EDIT Error#1 Error#2

EDIT # 2 @TilmanHausherr checkte ich deine Theorie. Ich habe die Datei in Sublime geöffnet, die zusätzlichen Leerzeichen im Start entfernt und gespeichert. Ich habe den folgenden Fehler

org.apache.pdfbox.filter.FlateFilter decode 
SEVERE: FlateFilter: stop reading corrupt stream due to a DataFormatException 
java.io.IOException: java.util.zip.DataFormatException: invalid distance too far back 
    at org.apache.pdfbox.filter.FlateFilter.decode(FlateFilter.java:82) 
    at org.apache.pdfbox.cos.COSInputStream.create(COSInputStream.java:69) 
    at org.apache.pdfbox.cos.COSStream.createInputStream(COSStream.java:162) 
    at org.apache.pdfbox.pdfparser.PDFXrefStreamParser.<init>(PDFXrefStreamParser.java:56) 
    at org.apache.pdfbox.pdfparser.COSParser.parseXrefStream(COSParser.java:2075) 
    at org.apache.pdfbox.pdfparser.COSParser.parseXrefObjStream(COSParser.java:348) 
    at org.apache.pdfbox.pdfparser.COSParser.parseXref(COSParser.java:303) 
    at org.apache.pdfbox.pdfparser.PDFParser.initialParse(PDFParser.java:194) 
    at org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:252) 
    at utils.PDFManager.PDFToText(PDFManager.java:280) 
    at processing.charge.CertificateUtils.getCertificateTypeFromFile(CertificateUtils.java:56) 
    at processing.charge.CertificateUtils.getCertificateType(CertificateUtils.java:48) 
    at processing.Controller.getDocumentType(Controller.java:110) 
    at processing.Controller.insertIntoDb(Controller.java:43) 
    at Test.main(Test.java:203) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) 
Caused by: java.util.zip.DataFormatException: invalid distance too far back 
    at java.util.zip.Inflater.inflateBytes(Native Method) 
    at java.util.zip.Inflater.inflate(Inflater.java:259) 
    at java.util.zip.Inflater.inflate(Inflater.java:280) 
    at org.apache.pdfbox.filter.FlateFilter.decompress(FlateFilter.java:107) 
    at org.apache.pdfbox.filter.FlateFilter.decode(FlateFilter.java:64) 
    ... 19 more 
Mar 09, 2017 11:07:22 PM org.apache.pdfbox.filter.FlateFilter decode 
SEVERE: FlateFilter: stop reading corrupt stream due to a DataFormatException 
java.io.IOException: java.util.zip.DataFormatException: invalid distance too far back 
    at org.apache.pdfbox.filter.FlateFilter.decode(FlateFilter.java:82) 
    at org.apache.pdfbox.cos.COSInputStream.create(COSInputStream.java:69) 
    at org.apache.pdfbox.cos.COSStream.createInputStream(COSStream.java:162) 
    at org.apache.pdfbox.pdfparser.PDFXrefStreamParser.<init>(PDFXrefStreamParser.java:56) 
    at org.apache.pdfbox.pdfparser.COSParser.parseXrefStream(COSParser.java:2075) 
    at org.apache.pdfbox.pdfparser.COSParser.parseXrefObjStream(COSParser.java:348) 
    at org.apache.pdfbox.pdfparser.COSParser.parseXref(COSParser.java:303) 
    at org.apache.pdfbox.pdfparser.PDFParser.initialParse(PDFParser.java:194) 
    at org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:252) 
    at utils.PDFManager.PDFToText(PDFManager.java:280) 
    at processing.charge.CertificateUtils.getCertificateTypeFromFile(CertificateUtils.java:56) 
    at processing.charge.CertificateUtils.getCertificateType(CertificateUtils.java:49) 
    at processing.Controller.getDocumentType(Controller.java:110) 
    at processing.Controller.insertIntoDb(Controller.java:43) 
    at Test.main(Test.java:203) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) 
Caused by: java.util.zip.DataFormatException: invalid distance too far back 
    at java.util.zip.Inflater.inflateBytes(Native Method) 
    at java.util.zip.Inflater.inflate(Inflater.java:259) 
    at java.util.zip.Inflater.inflate(Inflater.java:280) 
    at org.apache.pdfbox.filter.FlateFilter.decompress(FlateFilter.java:107) 
    at org.apache.pdfbox.filter.FlateFilter.decode(FlateFilter.java:64) 

Auch Ihre Theorie zu überprüfen, habe ich eine andere Datei geöffnet (das war richtig funktioniert) in Sublime, und es hatte den gleichen Leerzeichen, Tabs und CRs.

Working File

+2

Ich entfernte ITEXT-Tag, weil die Frage nicht über iText ist. Das macht deinen Kommentar überflüssig, @ bruno.lowagie. :) –

+0

@TilmanHaushrer Ich habe den Link zu PDFs hinzugefügt. Bitte überprüfen Sie diese. Danke – Mayank

+1

Beide Dateien sind ungültig. Sie können mit PDFBox geöffnet werden, indem die Leerzeichen (CRs und Tabs) am Anfang mit NOTEPAD ++ entfernt werden. Hast du diese Dateien so bekommen oder ist das ein Makel eines kaputten Webservers? Ich habe ein Problem mit Ihren Dateien geöffnet: https://issues.apache.org/jira/browse/PDFBOX-3714 –

Antwort

2

Wie in den Kommentaren diskutiert, haben die Dateien Zuschnitte (CRs und TABS) vor der PDF-Header beginnt. Sie können sie mit NOTEPAD ++ (oder mit jedem Editor, der Binärdateien bearbeiten kann) entfernen, oder (wenn alle Ihre Dateien diesen Fehler aufweisen), indem Sie einen kurzen Code schreiben, der einen Eingabestream öffnet, Bytes bis zum "%" schlucken und dann kopieren der ganze Rest von dort zu einem Ausgabestrom.

Ich habe auch Problem PDFBOX-3714 geöffnet.

Aktualisierung: Dies wurde in 2.0.5 behoben, jetzt verfügbar.

+0

Ich habe [PDFBOX-3714] eine Idee hinzugefügt (https://issues.apache.org/jira/browse/PDFBOX-3714). – mkl

+0

Danke. Genau das habe ich auch gesucht. Sieht aus wie dieser Fehler in 2.0.4 eingeführt und in 2.0.5 behoben wurde – VHS