[ https://issues.apache.org/jira/browse/PDFBOX-3329?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15261752#comment-15261752 ]
Alexander Kriegisch commented on PDFBOX-3329: --------------------------------------------- Have you tested the example by yourself? It does not work: {code} java.lang.IllegalStateException: Cannot read while there is an open stream writer at org.apache.pdfbox.cos.COSStream.createRawInputStream(COSStream.java:129) at org.apache.pdfbox.pdfwriter.COSWriter.visitFromStream(COSWriter.java:1177) at org.apache.pdfbox.cos.COSStream.accept(COSStream.java:372) at org.apache.pdfbox.pdfwriter.COSWriter.doWriteObject(COSWriter.java:561) at org.apache.pdfbox.pdfwriter.COSWriter.doWriteObjects(COSWriter.java:490) at org.apache.pdfbox.pdfwriter.COSWriter.doWriteBody(COSWriter.java:474) at org.apache.pdfbox.pdfwriter.COSWriter.visitFromDocument(COSWriter.java:1073) at org.apache.pdfbox.cos.COSDocument.accept(COSDocument.java:419) at org.apache.pdfbox.pdfwriter.COSWriter.write(COSWriter.java:1331) at org.apache.pdfbox.pdfwriter.COSWriter.write(COSWriter.java:1229) at org.apache.pdfbox.pdmodel.PDDocument.save(PDDocument.java:1101) at org.apache.pdfbox.multipdf.PDFMergerUtility.mergeDocuments(PDFMergerUtility.java:280) at org.apache.pdfbox.examples.util.PDFMergerExample.merge(PDFMergerExample.java:85) at MyTest.mergePDFs(MyTest.groovy:19) {code} The reason is that when you converted my Java 7/8 code using try with resources you forgot to replace it by a {{finally}} block closing the output streams in helper method {{createXMPMetadata}}. You can fix it like this: {code} // (...) // Create and return XMP data structure in XML format ByteArrayOutputStream xmpOutputStream = null; OutputStream cosXMPStream = null; try { xmpOutputStream = new ByteArrayOutputStream(); cosXMPStream = cosStream.createOutputStream(); new XmpSerializer().serialize(xmpMetadata, xmpOutputStream, true); cosXMPStream.write(xmpOutputStream.toByteArray()); return new PDMetadata(cosStream); } finally { try { xmpOutputStream.close(); } catch (Exception e) {} try { cosXMPStream.close(); } catch (Exception e) {} } {code} You also forgot to close the streams in the {{merge}} method, BTW. I am attaching a fixed version. > Create PDFMergerUtility example with improved metadata handling > --------------------------------------------------------------- > > Key: PDFBOX-3329 > URL: https://issues.apache.org/jira/browse/PDFBOX-3329 > Project: PDFBox > Issue Type: Improvement > Components: PDModel > Affects Versions: 2.0.1, 2.0.2, 2.1.0 > Reporter: Tilman Hausherr > Attachments: PDFMergerExample.java > > > Create example as suggested by [~kriegaex] in PDFBOX-3323. -- This message was sent by Atlassian JIRA (v6.3.4#6332) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@pdfbox.apache.org For additional commands, e-mail: dev-h...@pdfbox.apache.org