[
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: [email protected]
For additional commands, e-mail: [email protected]