6

我必须签署具有多个签名的 pdf。这不是同时进行的。所以A签署了文件,2天后,B签署了文件,依此类推......

正如 Manning iText in Action 和网上找到的以下代码示例中所述,要在已包含签名的文档上添加签名,我只需在创建签名时添加两个参数:

stamper = PdfStamper.createSignature(this.pdfReader,
                    workingBaos, PdfWriter.VERSION_1_7, null, true);

null 因为我不想使用临时文件和 true,以使用附加模式并创建新修订。

问题是当我打开 pdf 时,Acrobat Reader 说只有最后一个签名有效。之前的签名都是无效的。当我用 iText 验证 pdf 时,没有问题。

我错过了什么吗?

4

3 回答 3

7

我是你指的那本书的作者。IMO 书中关于数字签名的部分太短了,但出版商希望将页数保持在 500 以下(我设法说服他再增加大约 100 页)。

如果您想添加多个签名,请阅读此白皮书:http: //itextpdf.com/book/digitalsignatures 此白皮书仍在构建中,但您已经可以在“签署文件”部分找到您需要的代码工作流程”。

为了完整起见:如果您添加一个额外的签名,您应该创建一个PdfStamperin append mode的实例。

更新:当您说 iText 验证 PDF 时,您可能是指 iText 告诉您第二个签名有效。我认为 iText 看不到初始签名。如果有,请告诉我,我会调查的。

于 2012-09-26T07:31:57.637 回答
2

查看认证等级:

  • NOT_CERTIFIED——创建一个普通签名,即批准或收件人签名。一个文件可以由一个或多个收件人签署以供批准。

  • CERTIFIED_NO_CHANGES_ALLOWED——创建一个认证签名,也就是作者签名。应用签名后,将不允许对文档进行任何更改。

  • CERTIFIED_FORM_FILLING——为文档的作者创建一个认证签名。其他人仍然可以填写表单字段或添加批准签名,而不会使签名无效。

  • CERTIFIED_FORM_FILLING_AND_ANNOTATIONS——创建一个认证签名。其他人仍然可以填写表单字段或添加批准签名以及注释,而不会使签名无效。

请参阅PDF 的数字签名

尝试:

PdfSignatureAppearance appearance = stamper.getSignatureAppearance();
...
appearance.setCertificationLevel(PdfSignatureAppearance.NOT_CERTIFIED);
...
于 2013-10-18T17:18:04.777 回答
2

要为已经有签名的文档签名,您需要使用:

PdfSigner signer = new PdfSigner(reader, new FileStream(dest, FileMode.Create), tmp,
                new StampingProperties().UseAppendMode());

设置:UseAppendMode

于 2020-10-16T09:19:42.460 回答