Example usage for org.apache.pdfbox.pdmodel PDDocument saveIncrementalForExternalSigning

List of usage examples for org.apache.pdfbox.pdmodel PDDocument saveIncrementalForExternalSigning

Introduction

In this page you can find the example usage for org.apache.pdfbox.pdmodel PDDocument saveIncrementalForExternalSigning.

Prototype

public ExternalSigningSupport saveIncrementalForExternalSigning(OutputStream output) throws IOException 

Source Link

Document

Save PDF incrementally without closing for external signature creation scenario.

Usage

From source file:com.ackpdfbox.app.CreateSignature.java

License:Apache License

public void signDetached(PDDocument document, OutputStream output, TSAClient tsaClient) throws IOException {
    setTsaClient(tsaClient);/*from ww w.  j  av  a 2s  . co m*/

    // create signature dictionary
    PDSignature signature = new PDSignature();
    signature.setFilter(PDSignature.FILTER_ADOBE_PPKLITE);
    signature.setSubFilter(PDSignature.SUBFILTER_ADBE_PKCS7_DETACHED);
    signature.setName("Example User");
    signature.setLocation("Los Angeles, CA");
    signature.setReason("Testing");
    // TODO extract the above details from the signing certificate? Reason as a parameter?

    // the signing date, needed for valid signature
    signature.setSignDate(Calendar.getInstance());

    if (isExternalSigning()) {
        System.out.println("Sign externally...");
        document.addSignature(signature);
        ExternalSigningSupport externalSigning = document.saveIncrementalForExternalSigning(output);
        // invoke external signature service
        byte[] cmsSignature = sign(externalSigning.getContent());
        // set signature bytes received from the service
        externalSigning.setSignature(cmsSignature);
    } else {
        // register signature dictionary and sign interface
        document.addSignature(signature, this);

        // write incremental (only for signing purpose)
        document.saveIncremental(output);
    }
}

From source file:fixture.pdfboxeg.CreateSignature.java

License:Apache License

public void signDetached(PDDocument document, OutputStream output, TSAClient tsaClient, boolean certify)
        throws IOException {
    setTsaClient(tsaClient);/*from   ww w  .j av  a  2 s.c o m*/

    int accessPermissions = getMDPPermission(document);
    if (accessPermissions == 1) {
        throw new IllegalStateException(
                "No changes to the document are permitted due to DocMDP transform parameters dictionary");
    }

    // create signature dictionary
    PDSignature signature = new PDSignature();
    signature.setFilter(PDSignature.FILTER_ADOBE_PPKLITE);
    signature.setSubFilter(PDSignature.SUBFILTER_ADBE_PKCS7_DETACHED);
    signature.setName("Example User");
    signature.setLocation("Los Angeles, CA");
    signature.setReason("Testing");
    // TODO extract the above details from the signing certificate? Reason as a parameter?

    // the signing date, needed for valid signature
    signature.setSignDate(Calendar.getInstance());

    // Optional: certify 
    if (certify && accessPermissions == 0) {
        setMDPPermission(document, signature, 2);
    }

    if (isExternalSigning()) {
        //System.out.println("Sign externally...");
        document.addSignature(signature);
        ExternalSigningSupport externalSigning = document.saveIncrementalForExternalSigning(output);
        // invoke external signature service
        byte[] cmsSignature = sign(externalSigning.getContent());
        // set signature bytes received from the service
        externalSigning.setSignature(cmsSignature);
    } else {
        // register signature dictionary and sign interface
        document.addSignature(signature, this);

        // write incremental (only for signing purpose)
        document.saveIncremental(output);
    }
}