如何使用修订来避免PDF中的数字签名无效?

如何使用修订来避免PDF中的数字签名无效?,pdf,itextsharp,itext,digital-signature,Pdf,Itextsharp,Itext,Digital Signature,使用Acrobat 9,如果我使用自签名证书对PDF进行签名,然后在签名后编辑PDF,Acrobat将通知我文档上有有效签名,但文档也有未签名的更改。如果我再次签署PDF并查看签名面板,它将显示具有有效签名的第一个签名版本,注明在签署第一个版本后所做的更改,然后显示具有有效签名的第二个签名版本 我试图用iTextSharp复制这种行为。在代码中,我创建一个PDF并签名。然后,我编辑PDF并再次签名。当我在Acrobat中打开文档时,它会显示两个修订,但会将第一个修订标记为无效签名,因为文档已被更

使用Acrobat 9,如果我使用自签名证书对PDF进行签名,然后在签名后编辑PDF,Acrobat将通知我文档上有有效签名,但文档也有未签名的更改。如果我再次签署PDF并查看签名面板,它将显示具有有效签名的第一个签名版本,注明在签署第一个版本后所做的更改,然后显示具有有效签名的第二个签名版本

我试图用iTextSharp复制这种行为。在代码中,我创建一个PDF并签名。然后,我编辑PDF并再次签名。当我在Acrobat中打开文档时,它会显示两个修订,但会将第一个修订标记为无效签名,因为文档已被更改。据我所知,我认为iTextSharp正在签署整个文件,而不仅仅是该文件中的第一次修订。我已经在PdfStamper和PdfSignatureAppearance构造函数中将Append参数设置为true,但它似乎没有任何效果


因为我可以使用Acrobat获得期望的结果,所以我假设我只是没有正确使用iTextSharp。有人能解释一下吗?

你必须更新现有的PDF,而不是完全重写它。将以下属性设置为true以启用更新

PdfReader reader;
...
reader.Appendable = true;

我想Adobe是通过层来实现这一点的。PDF的每个修订版可能都放在不同的层中,然后签名。如果iText支持层,您可以用类似的方法来实现