0

我有一个基于 XFA 的 PDF,其中一些字段需要签名。但是,这些字段嵌入在 XFA 表单中,因此我无法使用以下代码对其进行签名

public void sign(String keystore, char[] password, String src, String name, String dest)
        throws GeneralSecurityException, IOException, DocumentException {
    KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
    ks.load(new FileInputStream(keystore), password);
    String alias = (String)ks.aliases().nextElement();
    PrivateKey pk = (PrivateKey) ks.getKey(alias, password);
    Certificate[] chain = ks.getCertificateChain(alias);
    // Creating the reader and the stamper
    PdfReader reader = new PdfReader(src);
    FileOutputStream os = new FileOutputStream(dest);
    PdfStamper stamper = PdfStamper.createSignature(reader, os, '\0', null, true);

    // Creating the appearance
    PdfSignatureAppearance appearance = stamper.getSignatureAppearance();
    appearance.setVisibleSignature(name);
    // Creating the signature
    PrivateKeySignature pks = new PrivateKeySignature(pk, DigestAlgorithms.SHA256, "BC");
    ExternalDigest digest = new BouncyCastleDigest();
    MakeSignature.signDetached(appearance, digest, pks, chain, null, null, null, 0, MakeSignature.CryptoStandard.CMS);
}

例如,我有一个名为“root[0].mainpage[0].root[2].DefaultPage[0].Page1[0].SignArea[0].GSA[0].GSF-shinfo_sh-tmp03_sh_sf[ 0]”。当我尝试将其放入参数“名称”时,我收到了错误消息

“线程“主”java.lang.IllegalArgumentException 中的异常:字段 roo​​t[0].mainpage[0].root[2].DefaultPage[0].Page1[0].SignArea[0].GSA[0]。 GSF-shinfo_sh-tmp03_sh_sf[0] 不存在。”

我已经解决了这个问题一个星期,但我还没有想出一个解决方案。关于这个问题有什么想法吗?谢谢!

PS:这是文件的下载地址

4

0 回答 0