[
https://issues.apache.org/jira/browse/PDFBOX-3743?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Tilman Hausherr updated PDFBOX-3743:
------------------------------------
Comment: was deleted
(was: I tried the same with the example code, and it didn't happen. So I wonder
what you did differently... )
> Running GC between signing and saving document closes stream
> ------------------------------------------------------------
>
> Key: PDFBOX-3743
> URL: https://issues.apache.org/jira/browse/PDFBOX-3743
> Project: PDFBox
> Issue Type: Bug
> Components: Documentation, Signing
> Affects Versions: 2.0.5
> Environment: Ubuntu 16.04 64-bit, play framework 1.5
> Reporter: Dmitri Ess
> Fix For: 2.0.6, 3.0.0
>
>
> Running GC between signing and saving document closes stream and signing
> process fails. It happens only if signature image is added via
> PDVisibleSignDesigner e.g.
> import org.apache.commons.io.IOUtils;
> import org.apache.pdfbox.pdmodel.PDDocument;
> import org.apache.pdfbox.pdmodel.interactive.digitalsignature.PDSignature;
> import
> org.apache.pdfbox.pdmodel.interactive.digitalsignature.SignatureOptions;
> import
> org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDVisibleSigProperties;
> import
> org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDVisibleSignDesigner;
> import java.io.*;
> import java.net.URISyntaxException;
> import static java.lang.Thread.currentThread;
> public class Foo {
> public static void main(String[] args) throws IOException,
> URISyntaxException {
> byte[] unsignedPdf = getResourceAsBytes("pdf-sample.pdf");
> try (PDDocument doc = PDDocument.load(unsignedPdf)) {
> doc.addSignature(
> new PDSignature(),
> is -> new byte[0],
> getSignatureOptions(doc, getFile("util/test-pdf-signature.jpg"))
> );
> System.gc();
> try (FileOutputStream out = new
> FileOutputStream(File.createTempFile("signed", ".pdf"))) {
> doc.saveIncremental(out);
> }
> }
> }
> private static SignatureOptions getSignatureOptions(PDDocument doc, File
> signatureImage) throws IOException {
> SignatureOptions result = new SignatureOptions();
> PDVisibleSignDesigner visibleSignature;
> try (InputStream input = new FileInputStream(signatureImage)) {
> visibleSignature = new PDVisibleSignDesigner(doc, input, 1);
> }
> PDVisibleSigProperties visibleSignatureProperties = new
> PDVisibleSigProperties();
>
> visibleSignatureProperties.setPdVisibleSignature(visibleSignature).buildSignature();
> result.setVisualSignature(visibleSignatureProperties);
> return result;
> }
> public static byte[] getResourceAsBytes(String filePath) throws
> IOException, URISyntaxException {
> return IOUtils.toByteArray(getFile(filePath).toURI());
> }
> public static File getFile(String filePath) throws URISyntaxException {
> return new
> File(currentThread().getContextClassLoader().getResource(filePath).toURI());
> }
> }
> constantly fails with:
> Exception in thread "main" java.io.IOException: COSStream has been closed and
> cannot be read. Perhaps its enclosing PDDocument has been closed?
> at org.apache.pdfbox.cos.COSStream.checkClosed(COSStream.java:77)
> at
> org.apache.pdfbox.cos.COSStream.createRawInputStream(COSStream.java:125)
> at
> org.apache.pdfbox.pdfwriter.COSWriter.visitFromStream(COSWriter.java:1203)
> at org.apache.pdfbox.cos.COSStream.accept(COSStream.java:383)
> at org.apache.pdfbox.cos.COSObject.accept(COSObject.java:158)
> at
> org.apache.pdfbox.pdfwriter.COSWriter.doWriteObject(COSWriter.java:522)
> at
> org.apache.pdfbox.pdfwriter.COSWriter.doWriteObjects(COSWriter.java:460)
> at org.apache.pdfbox.pdfwriter.COSWriter.doWriteBody(COSWriter.java:444)
> at
> org.apache.pdfbox.pdfwriter.COSWriter.visitFromDocument(COSWriter.java:1099)
> at org.apache.pdfbox.cos.COSDocument.accept(COSDocument.java:419)
> at org.apache.pdfbox.pdfwriter.COSWriter.write(COSWriter.java:1370)
> at
> org.apache.pdfbox.pdmodel.PDDocument.saveIncremental(PDDocument.java:1276)
> at Foo.main(Foo.java:27)
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]