2017-04-20 5 views
0

Nous essayons de passer d'iText 5 à iText 7 et avons vu quelques problèmes. Je reçois une exception en tant que "com.itextpdf.io.IOException: PDF startxref introuvable". inside PdfReader # readPdf() et enfin dans la méthode appelant obtenant une exception comme "com.itextpdf.kernel.PdfException: Trailer not found.".iText 7 - com.itextpdf.io.IOException: PDF startxref non trouvé

Mon cas d'utilisation crée par exemple PdfReader en utilisant inputSream puis créer PDFDocument du lecteur et en passant PdfWriter comme parameter.We constructeur tentent de modifier pdf existant, l'exemple de code est comme ci-dessous

PdfReader pdfReader = new PdfReader(inputStream); 
pdfReader.setUnethicalReading(true); 
ByteArrayOutputStream os = new ByteArrayOutputStream(); 
PdfDocument pdfDocument = new PdfDocument(pdfReader, new PdfWriter(os)); 

Can quelqu'un, s'il vous plaît suggérer ce que je fais mal et comment nous pouvons résoudre ce problème. Nous avons une méthode utilitaire qui écrit le flux de sortie et crée une nouvelle pièce jointe au format PDF.

+1

D'où vient l'entrée «inputStream»? Êtes-vous sûr de lire un fichier PDF correct (c'est-à-dire que vous pouvez l'ouvrir avec un outil PDF Viewer disponible)? Pouvez-vous partager un exemple de fichier PDF avec lequel vous avez des problèmes? –

+1

Dit simplement que les messages d'erreur signifient que votre 'InputStream' n'est pas positionné au début d'un pdf. C'est à dire. soit il n'y a pas de pdf valide ou le flux est déjà lu (partiellement ou complètement). – mkl

+0

@ Alexy- Le pdf est joint en pièce jointe à une table existante, nous avons une API par laquelle nous lisons la pièce jointe en tant que InputStream. Je suppose que le pdf qui était en train d'être créé était corrompu. J'ai besoin de regarder dans ce code comment je définis les valeurs dans les champs Pdf. –

Répondre

2

Copie la réponse des commentaires:

Je suis cette question fixé, je dois fermer pdfDocument avant que je suis pièces jointes d'écriture à partir du flux de sortie.

je ne ferme pas le flux correctement, j'ai créé le pdfDocument instance et la lecture de flux de sortie avant de fermer la pdfDocument. Donc, je dois d'abord fermer pdfDocument flux puis lire à partir du flux de sortie pour créer des pièces jointes.