Search in sources :

Example 6 with PDSignatureField

use of org.apache.pdfbox.pdmodel.interactive.form.PDSignatureField in project pdfbox by apache.

the class CreateVisibleSignature2 method findExistingSignature.

// Find an existing signature (assumed to be empty). You will usually not need this.
private PDSignature findExistingSignature(PDAcroForm acroForm, String sigFieldName) {
    PDSignature signature = null;
    PDSignatureField signatureField;
    if (acroForm != null) {
        signatureField = (PDSignatureField) acroForm.getField(sigFieldName);
        if (signatureField != null) {
            // retrieve signature dictionary
            signature = signatureField.getSignature();
            if (signature == null) {
                signature = new PDSignature();
                // after solving PDFBOX-3524
                // signatureField.setValue(signature)
                // until then:
                signatureField.getCOSObject().setItem(COSName.V, signature);
            } else {
                throw new IllegalStateException("The signature field " + sigFieldName + " is already signed.");
            }
        }
    }
    return signature;
}
Also used : PDSignatureField(org.apache.pdfbox.pdmodel.interactive.form.PDSignatureField) PDSignature(org.apache.pdfbox.pdmodel.interactive.digitalsignature.PDSignature)

Example 7 with PDSignatureField

use of org.apache.pdfbox.pdmodel.interactive.form.PDSignatureField in project tika by apache.

the class AbstractPDF2XHTML method addFieldString.

private void addFieldString(PDField field) throws SAXException {
    //Pick partial name to present in content and altName for attribute
    //Ignoring FullyQualifiedName for now
    String partName = field.getPartialName();
    String altName = field.getAlternateFieldName();
    StringBuilder sb = new StringBuilder();
    AttributesImpl attrs = new AttributesImpl();
    if (partName != null) {
        sb.append(partName).append(": ");
    }
    if (altName != null) {
        attrs.addAttribute("", "altName", "altName", "CDATA", altName);
    }
    //return early if PDSignature field
    if (field instanceof PDSignatureField) {
        handleSignature(attrs, (PDSignatureField) field);
        return;
    }
    String value = field.getValueAsString();
    if (value != null && !value.equals("null")) {
        sb.append(value);
    }
    if (attrs.getLength() > 0 || sb.length() > 0) {
        xhtml.startElement("li", attrs);
        xhtml.characters(sb.toString());
        xhtml.endElement("li");
    }
}
Also used : AttributesImpl(org.xml.sax.helpers.AttributesImpl) PDSignatureField(org.apache.pdfbox.pdmodel.interactive.form.PDSignatureField)

Example 8 with PDSignatureField

use of org.apache.pdfbox.pdmodel.interactive.form.PDSignatureField in project pdfbox by apache.

the class CreateVisibleSignature method findExistingSignature.

// Find an existing signature (assumed to be empty). You will usually not need this.
private PDSignature findExistingSignature(PDDocument doc, String sigFieldName) {
    PDSignature signature = null;
    PDSignatureField signatureField;
    PDAcroForm acroForm = doc.getDocumentCatalog().getAcroForm();
    if (acroForm != null) {
        signatureField = (PDSignatureField) acroForm.getField(sigFieldName);
        if (signatureField != null) {
            // retrieve signature dictionary
            signature = signatureField.getSignature();
            if (signature == null) {
                signature = new PDSignature();
                // after solving PDFBOX-3524
                // signatureField.setValue(signature)
                // until then:
                signatureField.getCOSObject().setItem(COSName.V, signature);
            } else {
                throw new IllegalStateException("The signature field " + sigFieldName + " is already signed.");
            }
        }
    }
    return signature;
}
Also used : PDSignatureField(org.apache.pdfbox.pdmodel.interactive.form.PDSignatureField) PDAcroForm(org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm) PDSignature(org.apache.pdfbox.pdmodel.interactive.digitalsignature.PDSignature)

Example 9 with PDSignatureField

use of org.apache.pdfbox.pdmodel.interactive.form.PDSignatureField in project pdfbox by apache.

the class PDDocument method addSignatureField.

/**
 * This will add a list of signature fields to the document.
 *
 * @param sigFields are the PDSignatureFields that should be added to the document
 * @param signatureInterface is a interface which provides signing capabilities
 * @param options signature options
 * @throws IOException if there is an error creating required fields
 */
public void addSignatureField(List<PDSignatureField> sigFields, SignatureInterface signatureInterface, SignatureOptions options) throws IOException {
    PDDocumentCatalog catalog = getDocumentCatalog();
    catalog.getCOSObject().setNeedToBeUpdated(true);
    PDAcroForm acroForm = catalog.getAcroForm();
    if (acroForm == null) {
        acroForm = new PDAcroForm(this);
        catalog.setAcroForm(acroForm);
    }
    COSDictionary acroFormDict = acroForm.getCOSObject();
    acroFormDict.setDirect(true);
    acroFormDict.setNeedToBeUpdated(true);
    if (!acroForm.isSignaturesExist()) {
        // 1 if at least one signature field is available
        acroForm.setSignaturesExist(true);
    }
    List<PDField> acroformFields = acroForm.getFields();
    for (PDSignatureField sigField : sigFields) {
        sigField.getCOSObject().setNeedToBeUpdated(true);
        // Check if the field already exists
        boolean checkSignatureField = checkSignatureField(acroForm.getFieldIterator(), sigField);
        if (checkSignatureField) {
            sigField.getCOSObject().setNeedToBeUpdated(true);
        } else {
            acroformFields.add(sigField);
        }
        // Check if we need to add a signature
        if (sigField.getSignature() != null) {
            sigField.getCOSObject().setNeedToBeUpdated(true);
            if (options == null) {
            // TODO ??
            }
            addSignature(sigField.getSignature(), signatureInterface, options);
        }
    }
}
Also used : PDField(org.apache.pdfbox.pdmodel.interactive.form.PDField) COSDictionary(org.apache.pdfbox.cos.COSDictionary) PDAcroForm(org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm) PDSignatureField(org.apache.pdfbox.pdmodel.interactive.form.PDSignatureField)

Example 10 with PDSignatureField

use of org.apache.pdfbox.pdmodel.interactive.form.PDSignatureField in project pdfbox by apache.

the class PDDocument method getSignatureFields.

/**
 * Retrieve all signature fields from the document.
 *
 * @return a <code>List</code> of <code>PDSignatureField</code>s
 */
public List<PDSignatureField> getSignatureFields() {
    List<PDSignatureField> fields = new ArrayList<>();
    PDAcroForm acroForm = getDocumentCatalog().getAcroForm();
    if (acroForm != null) {
        for (PDField field : acroForm.getFieldTree()) {
            if (field instanceof PDSignatureField) {
                fields.add((PDSignatureField) field);
            }
        }
    }
    return fields;
}
Also used : PDField(org.apache.pdfbox.pdmodel.interactive.form.PDField) COSArrayList(org.apache.pdfbox.pdmodel.common.COSArrayList) ArrayList(java.util.ArrayList) PDSignatureField(org.apache.pdfbox.pdmodel.interactive.form.PDSignatureField) PDAcroForm(org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm)

Aggregations

PDSignatureField (org.apache.pdfbox.pdmodel.interactive.form.PDSignatureField)10 PDAcroForm (org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm)7 PDField (org.apache.pdfbox.pdmodel.interactive.form.PDField)4 PDDocument (org.apache.pdfbox.pdmodel.PDDocument)3 PDPage (org.apache.pdfbox.pdmodel.PDPage)3 PDResources (org.apache.pdfbox.pdmodel.PDResources)3 PDRectangle (org.apache.pdfbox.pdmodel.common.PDRectangle)3 PDAnnotationWidget (org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget)3 ByteArrayInputStream (java.io.ByteArrayInputStream)2 COSArrayList (org.apache.pdfbox.pdmodel.common.COSArrayList)2 PDStream (org.apache.pdfbox.pdmodel.common.PDStream)2 PDFont (org.apache.pdfbox.pdmodel.font.PDFont)2 PDFormXObject (org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject)2 PDSignature (org.apache.pdfbox.pdmodel.interactive.digitalsignature.PDSignature)2 Point (java.awt.Point)1 AffineTransform (java.awt.geom.AffineTransform)1 ByteArrayOutputStream (java.io.ByteArrayOutputStream)1 InputStream (java.io.InputStream)1 ArrayList (java.util.ArrayList)1 COSArray (org.apache.pdfbox.cos.COSArray)1