"At least one signature is invalid" 在签名 PDF 中添加图章后

"At least one signature is invalid" After adding stamp in Signed PDF

我需要在签名的 PDF 中添加图章或图像注释,但它给我一个“无效签名”错误,并且在移动此注释后,它给我一个“至少需要验证一个签名”错误。我该如何解决?

我也找到了一个解决方案,但用于 中的文本注释。 它可以很好地处理文本注释,但我无法对图章执行相同的操作。

iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(@"D:\11.jpg");
float w = 100;
float h = 100;
iTextSharp.text.Rectangle location = new iTextSharp.text.Rectangle(36, 770 - h, 36 + w, 770);

PdfAnnotation stamp = PdfAnnotation.CreateStamp(stamper.Writer, location, null, "ITEXT");
img.SetAbsolutePosition(0, 0);
PdfContentByte cb = stamper.GetOverContent(1);
PdfAppearance app = cb.CreateAppearance(100, 100);
app.AddImage(img);
stamp.SetAppearance(PdfName.N, app);
stamper.AddAnnotation(stamp, 1);

这个

PdfContentByte cb = stamper.GetOverContent(1);

是导致签名失效的行。

调用stamper.GetOverContent(或stamper.GetUnderContent)已经为添加新内容准备了页面内容。这种准备已经被认为是页面内容的改变。由于禁止更改签名 PDF 的页面内容,这会使签名无效。

您仅使用此 PdfContentByte cb 为您的邮票注释创建 PdfAppearance

PdfAppearance app = cb.CreateAppearance(100, 100);

幸运的是,您不需要 cb 来创建 PdfAppearance,还有一个静态 PdfAppearance 方法可以这样做。因此,只需替换

PdfContentByte cb = stamper.GetOverContent(1);
PdfAppearance app = cb.CreateAppearance(100, 100);

来自

PdfAppearance app = PdfAppearance.CreateAppearance(stamper.Writer, 100, 100);