1

实际上,我有大约 20 个表单域的 PDF,其中一个表单域的类型为 'PDSignatureField' 。现在我需要为此 PDSignatureField 设置一个值

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

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);
        }

任何人都可以帮助我吗谢谢

4

1 回答 1

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”,我还没有找到原因。

希望这有帮助。

于 2014-03-14T14:18:22.490 回答