1

実際、私は約 20 のフォーム フィールドを持つ PDF を持っています。その 1 つのフォーム フィールドは 'PDSignatureField' 型です。ここで、この PDSignatureField に値を設定する必要があります

これが私が試したコードの一部です(署名値を取得できますが、ドキュメントを保存した後に署名を設定しようとすると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);
        }

誰でも私を助けてくれますか pls ありがとう

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 */

ただし、署名が 2 回表示されるという望ましくない結果が得られます。1 回は署名フィールドの値として、もう 1 回は別のファントム フィールド「Signature1」として表示されます。

この助けを願っています。

于 2014-03-14T14:18:22.490 に答える