Itext多个签名

时间:2012-09-26 07:25:14

标签: java pdf itext digital-signature

我必须签署一份包含多个签名的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时,没有问题。

我错过了什么吗?

3 个答案:

答案 0 :(得分:6)

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

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

为了完整起见:如果您添加其他签名,则应在追加模式中创建PdfStamper的实例。

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

答案 1 :(得分:1)

检查认证级别:

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

  • CERTIFIED_NO_CHANGES_ALLOWED-创建认证签名,即作者签名。应用签名后,不允许对文档进行任何更改。

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

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

请参阅Digital Signatures for PDF

尝试:

PdfSignatureAppearance appearance = stamper.getSignatureAppearance();
...
appearance.setCertificationLevel(PdfSignatureAppearance.NOT_CERTIFIED);
...

答案 2 :(得分:0)

要对已经具有签名的文档进行签名,您需要使用:

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

设置:UseAppendMode