Example usage for org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible PDVisibleSigProperties PDVisibleSigProperties

List of usage examples for org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible PDVisibleSigProperties PDVisibleSigProperties

Introduction

In this page you can find the example usage for org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible PDVisibleSigProperties PDVisibleSigProperties.

Prototype

PDVisibleSigProperties

Source Link

Usage

From source file:com.formkiq.core.service.generator.pdfbox.PdfEditorServiceImpl.java

License:Apache License

/**
 * Sets value of {@link PDSignatureField}.
 * @param doc {@link PDDocument}//from   w  ww.  j a  v  a  2 s . c om
 * @param field {@link PDSignatureField}
 * @param signatureInputStream {@link InputStream}
 * @return {@link SignatureOptions}
 * @throws IOException IOException
 */
private SignatureOptions setValue(final PDDocument doc, final PDSignatureField field,
        final InputStream signatureInputStream) throws IOException {

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

    // retrieve signature dictionary
    PDSignature signature = field.getSignature();

    if (signature == null) {
        signature = new PDSignature();
        // after solving PDFBOX-3524 - signatureField.setValue(signature)
        // until then:
        field.getCOSObject().setItem(COSName.V, signature);
    } else {
        throw new IllegalStateException(
                "The signature field " + field.getFullyQualifiedName() + " is already signed.");
    }

    // Optional: certify
    // can be done only if version is at least 1.5 and if not already set
    // doing this on a PDF/A-1b file fails validation by Adobe
    // preflight (PDFBOX-3821)
    // PDF/A-1b requires PDF version 1.4 max, so don't increase the version
    // on such files.
    final float version = 1.5f;
    if (doc.getVersion() >= version && accessPermissions == 0) {
        SigUtils.setMDPPermission(doc, signature, 2);
    }

    PDAcroForm acroForm = doc.getDocumentCatalog().getAcroForm();
    if (acroForm != null && acroForm.getNeedAppearances()) {
        // PDFBOX-3738 NeedAppearances true results in visible signature
        // becoming invisible
        // with Adobe Reader
        if (acroForm.getFields().isEmpty()) {
            // we can safely delete it if there are no fields
            acroForm.getCOSObject().removeItem(COSName.NEED_APPEARANCES);
            // note that if you've set MDP permissions, the removal of this
            // item
            // may result in Adobe Reader claiming that the document has
            // been changed.
            // and/or that field content won't be displayed properly.
            // ==> decide what you prefer and adjust your code accordingly.
        }
    }

    // default filter
    signature.setFilter(PDSignature.FILTER_ADOBE_PPKLITE);

    // subfilter for basic and PAdES Part 2 signatures
    signature.setSubFilter(PDSignature.SUBFILTER_ADBE_PKCS7_DETACHED);

    PDVisibleSignDesigner visibleSignDesigner = new PDVisibleSignDesigner(signatureInputStream);

    PDVisibleSigProperties visibleSigProps = new PDVisibleSigProperties();
    visibleSigProps
            //        .signerName(name)  // TODO add..
            //        .signerLocation(location) // TODO add.
            //        .signatureReason(reason)
            //        .preferredSize(preferredSize)
            //        .page(0) // TODO fix
            .visualSignEnabled(true).setPdVisibleSignature(visibleSignDesigner);

    visibleSigProps.buildSignature();

    signature.setName(visibleSigProps.getSignerName());
    signature.setLocation(visibleSigProps.getSignerLocation());
    signature.setReason(visibleSigProps.getSignatureReason());

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

    SignatureOptions sigOptions = new SignatureOptions();
    sigOptions.setVisualSignature(visibleSigProps.getVisibleSignature());
    sigOptions.setPage(visibleSigProps.getPage() - 1);
    doc.addSignature(signature, this, sigOptions);

    return sigOptions;
}

From source file:eu.europa.esig.dss.pdf.pdfbox.PdfBoxSignatureService.java

License:Open Source License

private void fillImageParameters(final PDDocument doc, final SignatureImageParameters imgParams,
        SignatureOptions options) throws IOException {

    // DSS-747. Using the DPI resolution to convert java size to dot
    ImageAndResolution ires = ImageUtils.create(imgParams);

    InputStream is = ires.getInputStream();
    try {// w  w w. ja va  2  s .  c om
        PDVisibleSignDesigner visibleSig = new PDVisibleSignDesigner(doc, is, imgParams.getPage());
        visibleSig.xAxis(imgParams.getxAxis()).yAxis(imgParams.getyAxis());
        visibleSig.width(ires.toXPoint(visibleSig.getWidth())).height(ires.toYPoint(visibleSig.getHeight()));

        PDVisibleSigProperties signatureProperties = new PDVisibleSigProperties();
        signatureProperties.visualSignEnabled(true).setPdVisibleSignature(visibleSig).buildSignature();

        options.setVisualSignature(signatureProperties);
        options.setPage(imgParams.getPage());
    } finally {
        IOUtils.closeQuietly(is);
    }
}