多次签名pdf iText

时间:2020-06-16 07:19:57

标签: itext

如果尝试使用itext 5.5.13.1模拟不同用户的签名几次,从而对文档进行签名,则PdfStamper处于AppendMode上。如果文档没有签名,则证书级别为CERTIFIED_NO_CHANGES_ALLOWED或CERTIFIED_FORM_FILLING_AND_ANNOTATIONS,否则我不会为PdfSignatureAppearence设置此参数。第二次签名后,第一个签名无效,因为文档已更改。任何想法如何解决这一问题? 这是我的代码:

characters

1 个答案:

答案 0 :(得分:0)

变化

屏幕截图中最重要的部分

screen shot

是签名面板上的签名之间的文本“已修改1页” 。这告诉我们,您所做的其他更改不只是添加和填充签名字段。检查文件本身很快就能识别出更改:

  • 在原始样本中。pdf

    只有一个内容流。

  • 在带有一个签名的sample_signed.pdf中

    一共有三个内容流,原始的一个被新的内容包住了。

  • 在带有两个签名的sample_signed_signed.pdf中

    一共有五个内容流,前三个由两个新的内容包住。

因此,在每次签名过程中,您都要更改页面内容。如您在this answer中所读,总是禁止对签名文档的页面内容进行更改。所添加的流的内容微不足道甚至没有帮助,前面添加的每个流都包含:

q

,最后添加的每个流都包含

Q
q
Q

即只有一些保存和恢复图形状态发生。

原因

上述更改是通过PdfStamper方法GetOverContent完成的典型准备步骤,将原始内容包装在q ... Q(保存并恢复图形状态)信封中,以防止更改影响OverContent中的添加项,并开始一个新的程序段(也包含在这样的信封中)。后面的块保持空白,表示OverContent尚未编辑。

在您发布的代码中找不到这样的调用,但是在您的代码中缺少方法SetStampCoordinates。您可能会在该方法中为GetOverContent参数调用PdfStamper吗?