iTextSharp - Pdf文件上的数字签名问题

时间:2013-04-29 19:44:14

标签: c# pdf itextsharp

我正在使用iTextSharp将数字签名添加到新的pdf中。数字签名按预期放置在文件上。但是,当我点击框中时,它实际上不允许我选择我的数字签名来签名。

我已经开设了我们公司的其他pdf文件,允许数字签名,只是为了测试我的签名是否有效。当我点击这个pdf的方框时,它允许我选择数字签名;所以我知道我的签名确实有效。

任何人都知道是什么导致了这个问题?将签名添加到pdf的代码,我用于测试,如下所示:

非常感谢任何帮助。

using (Document document = new Document())
        {
            PdfWriter writer = PdfWriter.GetInstance(document, new System.IO.FileStream(@"C:\Users\myusername\Desktop\test.pdf", System.IO.FileMode.Create));
            document.Open();
            document.Add(new Paragraph("A paragraph"));
            PdfFormField sig = PdfFormField.CreateSignature(writer);
            sig.SetWidget(new Rectangle(100, 100, 250, 150), null);
            sig.FieldName = "testSignature";
            sig.Flags = PdfAnnotation.FLAGS_PRINT;
            sig.SetPage();
            sig.MKBorderColor = BaseColor.BLACK;
            sig.MKBackgroundColor = BaseColor.WHITE;
            PdfAppearance appearance = PdfAppearance.CreateAppearance(writer, 72, 48);
            appearance.Rectangle(0.5f, 0.5f, 71.5f, 47.5f);
            appearance.Stroke();
            sig.SetAppearance(
              PdfAnnotation.APPEARANCE_NORMAL, appearance
            );
            writer.AddAnnotation(sig);
        }

1 个答案:

答案 0 :(得分:1)

我认为这里存在误解。

使用iText或iTextSharp向PDF添加签名字段时,拥有完整版Adobe Acrobat的人可以使用该字段对PDF进行签名。或者,您可以使用iText(夏普)以编程方式对文档进行签名。

只有Adobe Reader的人才能通过单击注释来签名文件。这是正常的:PDF不是"阅读器已启用。"读者启用只能在Acrobat(和其他一些Adobe产品)中完成。使用Adobe的私钥,一种特殊的使用权限#34;签名已应用。当Adobe Reader可以使用Adobe公钥验证此特殊签名时,Adobe Reader会解锁特定功能,例如:能够像阅读器是Acrobat一样签署文档。

不言而喻,除了ADOBE之外,没有其他第三方可以使用Adobe的私钥来实现这一目标。