是否可以为已签名的PDF文档生成数字签名?
通常是,但必须在增量更新中添加附加签名,以使先前存在的签名无效。有些背景请看 这个答案 。
如果您的代码,这意味着您必须更换线
stamper = PdfStamper.createSignature(reader, os, '\0');
通过
stamper = PdfStamper.createSignature(reader, os, '\0', null, true);
该 true 表示签名应适用于 追加模式 这是iText术语,用于在增量更新中添加更改。
true
此外,您必须确保在不同的表单字段中创建新签名。您的代码将签名添加到已编码字段“sig”中:
appearance.setVisibleSignature(new Rectangle(800, 732, 512, 780), 1, "sig");
如果您知道预先存在的签名字段的名称不同,则可以。否则你可能想要替换“sig” null 这使得iText为新签名创建了一个唯一的字段名称。
null
上面我说“一般是” - 有一个例外,如果原始签名是“不允许更改”的证书签名,则应用额外签名将破坏原始签名,因为应用它是一种更改。