【发布时间】:2019-12-25 15:06:37
【问题描述】:
我已对名为“原始”的 PDF 进行了数字签名,并显示成功消息:“已签名且所有签名均有效。” 当我尝试使用以下代码修改该 pdf 的数据并打开名为“NewlyCreated”的文档时,签名变得无效 带有错误消息:至少一个签名是有效的
public class Program
{
public const String src = @"C:\Original.pdf";
public const String dest = @"C:\NewlyCreated.pdf";
public void createPdf1(String dest)
{
PdfReader reader = new PdfReader(src);
PdfDocument pdfDoc = new PdfDocument(reader,new PdfWriter(dest),new StampingProperties().UseAppendMode());
PageSize ps = pdfDoc.GetDefaultPageSize();
Paragraph p = new Paragraph("This is the text added in the rectangle.");
PdfCanvas canvas = new PdfCanvas(pdfDoc.GetFirstPage());
Rectangle rect = new Rectangle(ps.GetWidth() - 90, ps.GetHeight() - 100, 50, 50);
new Canvas(canvas, pdfDoc, rect)
.Add(p);
canvas.Rectangle(rect);
canvas.Stroke();
pdfDoc.Close();
}
public static void Main(string[] args)
{
Program objProgram = new Program();
objProgram.createPdf1(dest);
}
}
如何在不使用 iText7 使其签名无效的情况下修改 pdf
【问题讨论】:
-
这不是签名的重点吗?您签名表明您同意原始版本,但不同意未来的任何修改。如果您确实需要编辑文档,但可以将其拆分为多个部分,请签署一份并编辑另一份。
-
对某物进行数字签名的全部意义在于,您可以验证它在签名后没有被修改过。如果您的要求是可能的,那么您认为签名的目的是什么?
-
这里要做的不是让签名身份为未知。与 adobe reader 一样,如果有未签名的更改,它只会说签名有效但有未签名的更改。这是所需要的。但是如果我使用上面的代码,它只会使签名无效。我想以某种方式保留签名。
-
查看您的问题的答案已被关闭作为副本 - 仅允许对已签名文件进行极少数类型的更改;特别是不允许更改页面内容,并且您的代码会更改页面内容。 “在 adobe reader 中,如果有未签名的更改,它只会说签名有效但有未签名的更改。” - 这是不正确的。至少从 Adobe Acrobat 8 或 9 开始,对页面内容的更改总是被认为会破坏签名。更改表单字段值或注释是另一回事。
-
关于您的问题 “我如何修改 pdf 而不会使用 iText7 使其签名无效” - 将自己限制在您的问题的答案中所列举的允许的修改已关闭作为的副本。 IE。本质上,除非文档完全锁定,否则表单字段填写和注释可能会更改。当然,还添加了验证信息和文档时间戳。如果您在初始签名之前可以访问文档,您甚至可能会感到自大并使用页面模板。
标签: c# pdf adobe digital-signature itext7