【发布时间】:2018-05-03 09:54:44
【问题描述】:
我想删除最后一个签名,其他签名也可以使用 adobe.reader verify_sign 成功。
原文件已签名并使用adobe.reader验证签名成功,但是当我执行此代码时(我没有删除签名),目标文件使用adobe.reader验证签名失败。但是当我使用 adobe.reader 打开它们时,它们的内容显示正常。
我怀疑功能·PdfStamper· 破坏了签名数据。我应该如何避免这个问题?
我使用 itext 和 itextsharp(Java 和 C#),它们都是这个问题。 itex 和 itextsharp 版本是 5.5.10
我找到了url"AT least one signature is invalid" error message after removing signature from pdf using itext它已经删除了签名显示失败,但我没有删除签名,只有'new PdfStamper',目标文件使用adobe.reader验证签名失败。
谢谢~
PdfReader re = new PdfReader(filePath);
PdfStamper pdfStamper = new PdfStamper(re, new FileStream(temfilePath, FileMode.Create));
//TODO temfilePath verify signature failed.
/*
* // not do this code
* //just remove the last signature.
* AcroFields acro = re.AcroFields;
* List<string> list = acro.GetSignatureNames();
* int i = 0;
* foreach (string s in list)
* {
* if (list.Count == i)
* {
* acro.ClearSignatureField(s); acro.RemoveField(s);
* }
* i++;
*
* }
*/
pdfStamper.Close();
re.Close();
【问题讨论】:
-
您的方法存在两个主要问题:a 您在未使用自动损坏文件中所有签名的附加模式的情况下标记已签名的 pdf,以及 b b> 您尝试以不允许任何类型签名的方式在 pdf 更新中更改已签名 pdf 的表单字段结构。
-
我不完全确定我是否正确理解了您的用例。是否要将pdf回滚到最外层之前签名的状态?然后布鲁诺的回答告诉你究竟该怎么做。或者您是否只想删除最外面的签名但保留自上一个签名以来的所有其他更改(例如表单填写)?那么你的任务就很重要了……
-
或者您是否只想删除最外层的签名但保留自上一个签名以来的所有其他更改(例如表单填写)?这将是一个非常奇怪的要求。我想知道哪个用例需要这个。
-
@BrunoLowagie “这将是一个非常奇怪的要求。我想知道哪个用例需要这个。” - 那里有一些奇怪的东西。例如。很多人忘记带上各自的毛巾……
-
@BrunoLowagie 永远不要忘记你的毛巾! 光剑是个不错的玩具,但它能提供营养吗? ;)