使用iTextSharp在PDF的所有页面中显示签名

时间:2013-12-10 18:18:22

标签: c# pdf itextsharp

您好我想在PDF的所有页面上显示数字签名,我研究过但只找到了在所有页面上插入图像的方法,但我的证书没有图像,有人可以帮我。 下面是一段代码:

sap.SetVisibleSignature( new iTextSharp.text.Rectangle( 10f, 10f, 110f, 30f ), reader.NumberOfPages, null );
sap.SignDate = DateTime.Now;
sap.Acro6Layers = true;
PdfSignature dic = new PdfSignature( PdfName.ADOBE_PPKMS, PdfName.ADBE_PKCS7_SHA1 );
dic.Date = new PdfDate( sap.SignDate );
signName = iTextSharp.text.pdf.security.CertificateInfo.GetSubjectFields( sap.Certificate ).GetField( "CN" );
dic.Name = signName;

if ( sap.Reason != null ) dic.Reason = sap.Reason;
if ( sap.Location != null ) dic.Location = sap.Location;

他的代码只显示PDF最后一页上的签名。

1 个答案:

答案 0 :(得分:3)

我从即将发布的规范草案中截取了一个屏幕截图。

enter image description here

您要求拥有一个由多个窗口小部件注释表示的签名(每页一个)。但是,规范说:

  

签名字段永远不会引用多个注释。

每当规范使用 一词时,任何不符合规范的PDF都被视为无效。 (如果规范仅推荐某些内容,则使用一词。)

总结:你问的是不允许的东西(现在:不推荐;以后:禁止)。

额外备注: PDF中的数字签名涵盖整个文档。在每个页面上放置可视标记是没有用的,因为这会鼓励人们误以为PDF中的数字签名可用于对单独的页面进行签名。在ISO规范中添加一个签名=一个窗口小部件注释的原因也很有教育意义:无论谁在每个页面上要求单个签名的窗口小部件注释,都证明他或她不理解这个概念PDF格式的数字签名; - )