我们正在使用通过Adobe生命周期设计器9生成的PDF动态表单 . 表单数据存储在XFA中,并由iText设置,也可以通过Adobe Reader中的用户交互设置(因此,它支持读者的PDF表单和签名仅锁定某些字段 - FieldMDP) .

这是我们需要使用的场景,在此链接中,您可以找到PDF(https://onedrive.live.com/?cid=195541F2D86BFC76&id=195541f2d86bfc76%21107&v=3&authkey=%21AGtMASJ3wPHv1hU)的屏幕截图:

  • iText以PDF格式填写3个字段(在我们的示例字段中标记为"Locked by S1 ...")

  • 用户更改以前某个字段中的值(标记为"Locked by S1"),并使用批准签名(通过字段S1)对文档进行签名,这将锁定前3个字段(标记为"Locked by S1...")

  • itext填写其他字段,该字段未被S1签名锁定(标记为"Locked by S2 RO")

  • 用户显示PDF并验证签名S1后,Adobe Reader显示字段S1中的签名无效的信息,因为字段"Locked by S1"中有更改,但iText未更改此字段值 .

以下是我在玩类似场景时的观察结果:

  • 如果在步骤2中,用户未对iText填充的字段进行任何更改(使用'Val3')并在字段S1中签署文档,则签名仍然有效(在下面的链接中为文件:PDF_u1s1u2_validSig)

  • 我们正在使用iText 5.4.1但是我们也尝试了iText 5.5.5,结果相同

  • 我们需要使用Adobe Reader 11.但是当我们在Adobe Reader 9中使用无效签名验证PDF时,我们可以看到签名有效 . 我们尝试的所有更高版本的Adobe Reader 9.5,10,11都将签名显示为无效 .

  • 如果我们检查使Adobe Acrobat中的签名无效的字段值,并且我们将签名的修订版与带有无效签名的PDF进行比较,则此字段未标记为已更改(两个版本中的值相同),因此我们无法理解为什么它被标记为已更改 .

无效和有效PDF的屏幕截图以及您可以在URL中找到的PDF表单:https://onedrive.live.com/redir?resid=195541f2d86bfc76!108&authkey=!AGtMASJ3wPHv1hU&ithint=folder%2cpng

感谢任何可以澄清为什么第一个签名失效的输入 .