如何使用PDFBox api在PDF表单字段中设置签名

时间:2013-10-28 12:46:35

标签: java signature pdfbox

实际上我的PDF表格字段约为20,其中一个表单字段的类型为“PDSignatureField”。现在我需要为此PDSignatureField

设置一个值

这是我尝试的部分代码(我能够获得Signature值,但是当我尝试设置签名时,无法在保存文档后查看它)

GetSignature - >工作正常

        document = PDDocument.load(documents);
        PDAcroForm form = document.getDocumentCatalog().getAcroForm();
        PDField pdfFields;
        pdfFields = form.getField("EMPLOYEE SIGNATURE");
        if (pdfFields instanceof PDSignatureField)
        {
            PDSignatureField f3 = (PDSignatureField)form.getField("EMPLOYEE SIGNATURE");
            System.out.println(f3.getSignature().getName());
        }

SetSignature - >无法在该特定表单字段中查看签名值
这里'sigObject'被声明为PDSignature对象

        document = PDDocument.load(documents);
        PDAcroForm form = document.getDocumentCatalog().getAcroForm();
        PDField pdfFields;
        pdfFields = form.getField("EMPLOYEE SIGNATURE");
        if (pdfFields instanceof PDSignatureField)
        {
            PDSignatureField f3 = (PDSignatureField)form.getField("EMPLOYEE SIGNATURE");
            sigObject.setName("Test");
            sigObject.setLocation("Test");
            sigObject.setReason("Test"); 
            sigObject.setSignDate(Calendar.getInstance());
            f3.setSignature(sigObject);
        }

任何人都可以帮助我 谢谢

1 个答案:

答案 0 :(得分:0)

我有一个类似的问题,我几乎在f3.setSignature(sigObject)之后添加了以下代码片段:

/* f3.setSignature(sigObject) only sets the V attribute of the signature field. You still
   need to call document.addSignature() to register the signature interface and call
   saveIncremental() to call the sign() method and generate the actual Signature Dictionary object       
*/

f3.getCOSObject().setNeedToBeUpdate(true);
document.addSignature(sigObject, this);
document.saveIncremental(fis, fos); /* as in pdfbox examples */

但是,我仍然有一个不良结果,其中签名显示两次,一次作为签名字段的值,另一个作为另一个幻像字段“Signature1”,我还没有找到原因。

希望得到这个帮助。