2017-03-09 3 views
2

Je reçois les erreurs suivantes en essayant de convertir PDF (XFA) en chaîne. Ces erreurs ont commencé à venir lorsque je suis passé de PDFBox 1.8.12 à PDFBox 2.0.4PDFBox 2.0.4: XFA à l'erreur de texte

Voici le journal

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) 

et

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) 

Je lis la migration et utilisé la charge au lieu de loadNonSeq, parce que maintenant les poignées PDFBox à l'interne.

Toutes les suggestions pour corriger ces erreurs. J'ai vérifié votre théorie

EDIT Error#1 Error#2

EDIT # 2 @TilmanHausherr. J'ai ouvert le fichier dans Sublime, supprimé les espaces supplémentaires dans le démarrage et l'a enregistré. J'ai obtenu l'erreur suivante

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) 

également pour vérifier votre théorie, j'ai ouvert un autre fichier (qui fonctionnait correctement) dans Sublime, et il avait les mêmes espaces, les onglets et les Conseillers.

Working File

+2

J'ai supprimé le tag itext car la question ne concerne pas iText. Ce qui rend votre commentaire redondant, @ bruno.lowagie. :) –

+0

@TilmanHausherr J'ai ajouté le lien aux PDF. S'il vous plaît vérifier ces. Merci – Mayank

+1

Les deux fichiers ne sont pas valides. Ils peuvent être ouverts avec PDFBox en supprimant les caractères vides (CRs et Tabs) au début avec NOTEPAD ++. Avez-vous eu ces fichiers comme ça ou est-ce une faille d'un serveur web cassé? J'ai ouvert un problème avec vos fichiers: https://issues.apache.org/jira/browse/PDFBOX-3714 –

Répondre

2

Comme il est indiqué dans les commentaires, les fichiers ont des blancs (et CRs) avant TABs l'en-tête PDF commence. Vous pouvez les supprimer avec NOTEPAD ++ (ou avec n'importe quel éditeur qui peut éditer des fichiers binaires), ou (si tous vos fichiers ont cette faille) en écrivant un code court qui ouvre un flux d'entrée, avalez des octets jusqu'à "%" tout le reste de là à un flux de sortie.

J'ai également ouvert le numéro PDFBOX-3714.

Mise à jour: Ceci a été corrigé dans 2.0.5, maintenant disponible.

+0

J'ai ajouté une idée à [PDFBOX-3714] (https://issues.apache.org/jira/browse/PDFBOX-3714). – mkl

+0

Merci. C'est exactement ce que je cherchais aussi. On dirait que ce bug a été introduit en 2.0.4 et corrigé en 2.0.5 – VHS