用iText 7签名的 PDF/A未通过VeraPDF 1b验证



我正在评估iText 7.2.2用于签署PDF/A (1b/2b/3b)文档。当前使用自签名证书(可能会更改为"官方"证书)。(将来的某个时候),但这可能与我遇到的验证问题无关。有问题的PDF/a -1b文档是由在幕后运行Ghostscript的Documentum服务生成的。PDF/A-1b文档通过VeraPDF验证。然而,在用iText对其签名之后(代码如下),验证失败:

VeraPDF PDF/A-1b验证报告

代码:

Certificate[] chain = ks.getCertificateChain(alias);
PdfReader reader = new PdfReader(src);
PdfSigner signer = new PdfSigner(reader, new FileOutputStream(dest), new StampingProperties());
IExternalSignature pks = new PrivateKeySignature(pk, DigestAlgorithms.SHA256, new BouncyCastleProvider().getName());
IExternalDigest digest = new BouncyCastleDigest();
// Sign the document using the detached mode, CMS or CAdES equivalent.
signer.signDetached(digest, pks, chain, null, null, null, 0, PdfSigner.CryptoStandard.CMS);

我假设"表单字段"指的是签名。因此,我不知道该怎么做才能解决缺乏"外表词典"的问题。正如代码所示,这实际上是一个不可见的签名。

仅供参考,用于签名的代码基于此iText KB

验证器抱怨签名表单字段外观缺失。要添加签名表单字段的外观,可以使用PdfSigner提供的方便的构建器:

signer.setFieldName("signature");
signer.getSignatureAppearance()
        .setPageRect(rect)
        .setReasonCaption(line)
        .setLayer2Font(font)
        .setLayer2Text("Hello, iText");

确保在调用signDetached

之前构建外观

最新更新