[ 
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]

Reply via email to