2017-08-10 1 views
0

Actuellement, je suis capable de fusionner deux fichiers PDF lors de l'utilisation de java.io.File, mais impossible de les fusionner en utilisant les flux d'entrée et de sortie. Ci-dessous, le code fonctionne et génère un fichier PDF fusionné en réussissant.Impossible de fusionner les flux avec PDFBox

File mainDoc = new File(path...); 
File additionalDoc = new File(path...); 

PDFMergerUtility pdfMerger = new PDFMergerUtility(); 
pdfMerger.setDestinationFileName(path + "/merged.pdf"); 
pdfMerger.addSource(mainDoc); 
pdfMerger.addSource(additionalDoc); 
pdfMerger.mergeDocuments(null); 

J'ai ensuite essayé de faire la même chose en utilisant des flux.

ByteArrayOutputStream out = new ByteArrayOutputStream(); 
InputStream mainDocStream = new FileInputStream(path...); 
InputStream additionalDocSteam = new FileInputStream(path...); 
PDFMergerUtility pdfMerger = new PDFMergerUtility(); 
pdfMerger.addSource(mainDocStream); 
pdfMerger.addSource(additionalDocSteam); 
pdfMerger.setDestinationStream(out); 
pdfMerger.mergeDocuments(null); 

Le code ci-dessus lorsque la ligne atteint pdfMerger.mergeDocuments (NULL); throws Exception suivante:

java.io.IOException: Error: End-of-File, expected line at org.apache.pdfbox.pdfparser.BaseParser.readLine(BaseParser.java:1119) at org.apache.pdfbox.pdfparser.COSParser.parseHeader(COSParser.java:2005) at org.apache.pdfbox.pdfparser.COSParser.parsePDFHeader(COSParser.java:1988) at org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:269) at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1143) at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1059) at org.apache.pdfbox.multipdf.PDFMergerUtility.mergeDocuments(PDFMergerUtility.java:263)

Enfin j'ai essayé de suivre cette réponse (Merge Pdf Files Using PDFBox) comme un exemple, mais mon produit pdf ne semble pas avoir fusionné ces deux pdfs. C'est le code que j'ai essayé. Le code ci-dessus génère un PDF mais le PDF nouvellement créé contient uniquement le contenu du document principal et non le second. Il semble donc qu'il me manque quelque chose et les documents ne sont pas fusionnés.

+0

Puisque je ne veux pas ouvrir une nouvelle question. Y a-t-il des avantages à utiliser appendDocument au lieu de mergeDocuments? – Stephan

+0

Stacktrace ajouté. – Stephan

+0

Merci; cette stacktrace est exactement celle que vous obtenez lorsque vous ouvrez un fichier vide. La fusion fonctionne pour moi avec des flux (non vides). –

Répondre

0

J'ai été capable de trouver une solution, mais je n'arrive toujours pas à comprendre ce qui ne va pas lorsque j'utilise des flux. En détail:

Alors que le code suivant lance une exception (java.io.IOException: Erreur: fin de fichier, ligne prévu):

ByteArrayOutputStream out = new ByteArrayOutputStream(); 
InputStream mainDocStream = new FileInputStream(path...); 
InputStream additionalDocStream = new FileInputStream(path...); 
PDFMergerUtility pdfMerger = new PDFMergerUtility(); 
pdfMerger.addSource(mainDocStream); 
pdfMerger.addSource(additionalDocStream); 
pdfMerger.setDestinationStream(out); 
pdfMerger.mergeDocuments(null); 

Lorsque vous utilisez un fichier dans le Méthode addSource, tout semble fonctionner comme requis. Maintenant, pourquoi la première approche utilisant des flux jette une exception tout en utilisant directement le fichier fonctionne, c'est quelque chose que j'aimerais aussi savoir.

+0

* "pourquoi la première approche utilisant des flux jette une exception tout en utilisant directement le fichier fonctionne, est quelque chose que je voudrais aussi savoir." * - Si vous ne considérez pas que votre question soit correctement répondue sans cela, vous devriez poster votre solution actuelle comme modifier à la question, pas comme réponse ... – mkl