随着电子账单、回单、通知、合同的流行,电子文档的可信度变得非常重要。为防止非法篡改,确保文档的权威性,我们可以对PDF进行数字签名。
注意:在服务器上进行数字签名时,请将应用池配置中“加载用户配置文件”设置为true。
添加数字签名
Spire.PDF支持使用PFX数字证书生成数字签名,添加签名时,请务必保证PFX证书的有效性。
C#
//初始化一个PdfDocument实例
PdfDocument doc = new PdfDocument();
//加载PDF文档
doc.LoadFromFile("sample.pdf");
//根据PFX证书实例化一个PdfCertificate对象
PdfCertificate cert = new PdfCertificate("gary.pfx", "e-iceblue");
//在指定页面添加数字签名
PdfSignature signature = new PdfSignature(doc, doc.Pages[0], cert, "Signature1");
//设置签名的位置和大小
signature.Bounds = new RectangleF(new PointF(200, 600), new SizeF(180, 90));
//设置签名内容
signature.IsTag = true;
signature.DigitalSignerLable = "Digitally signed by: ";
signature.DigitalSigner = "Gary";
signature.LocationInfoLabel = "Location:";
signature.LocationInfo = "CN";
signature.ReasonLabel = "Reason: ";
signature.Reason = "Ensure authenticity";
signature.DateLabel = "Date: ";
signature.Date = DateTime.Now;
signature.ContactInfoLabel = "Contact Number: ";
signature.ContactInfo = "028-81705109";
//设置被签名文档的编辑权限
signature.DocumentPermissions = PdfCertificationFlags.AllowFormFill | PdfCertificationFlags.ForbidChanges;
//保存文档
doc.SaveToFile("数字签名.pdf");
VB.NET
'初始化一个PdfDocument实例
Dim doc As New PdfDocument()
'加载PDF文档
doc.LoadFromFile("sample.pdf")
'根据PFX证书实例化一个PdfCertificate对象
Dim cert As New PdfCertificate("gary.pfx", "e-iceblue")
'在指定页面添加数字签名
Dim signature As New PdfSignature(doc, doc.Pages(0), cert, "Signature1")
'设置签名的位置和大小
signature.Bounds = New RectangleF(New PointF(200, 600), New SizeF(180, 90))
'设置签名内容
signature.IsTag = True
signature.DigitalSignerLable = "Digitally signed by: "
signature.DigitalSigner = "Gary"
signature.LocationInfoLabel = "Location:"
signature.LocationInfo = "CN"
signature.ReasonLabel = "Reason: "
signature.Reason = "Ensure authenticity"
signature.DateLabel = "Date: "
signature.[Date] = DateTime.Now
signature.ContactInfoLabel = "Contact Number: "
signature.ContactInfo = "028-81705109"
'设置被签名文档的编辑权限
signature.DocumentPermissions = PdfCertificationFlags.AllowFormFill Or PdfCertificationFlags.ForbidChanges
'保存文档
doc.SaveToFile("数字签名.pdf")
添加数字签名域
除了直接添加数字签名以外,我们也可以在PDF文档创建数字签名域。点击该签名域,用户就可以手动添加数字签名。
C#
//新建一个PDF文档并添加一页
PdfDocument doc = new PdfDocument();
PdfPageBase page = doc.Pages.Add();
//实例化一个PdfSignatureField对象,指定创建页面及名称
PdfSignatureField signaturefield = new PdfSignatureField(page, "Signature");
//设置签名域的相关属性
signaturefield.BorderWidth = 1.0f;
signaturefield.BorderStyle = PdfBorderStyle.Solid;
signaturefield.BorderColor = new PdfRGBColor(System.Drawing.Color.Black);
signaturefield.HighlightMode = PdfHighlightMode.Outline;
signaturefield.Bounds = new RectangleF(100, 100, 100, 100);
//添加签名域到fields collection
doc.Form.Fields.Add(signaturefield);
//保存文档
doc.SaveToFile("AddSignField.pdf", FileFormat.PDF);
VB.NET
'新建一个PDF文档并添加一页
Dim doc As New PdfDocument()
Dim page As PdfPageBase = doc.Pages.Add()
'实例化一个PdfSignatureField对象,指定创建页面及名称
Dim signaturefield As New PdfSignatureField(page, "Signature")
'设置签名域的相关属性
signaturefield.BorderWidth = 1F
signaturefield.BorderStyle = PdfBorderStyle.Solid
signaturefield.BorderColor = New PdfRGBColor(System.Drawing.Color.Black)
signaturefield.HighlightMode = PdfHighlightMode.Outline
signaturefield.Bounds = New RectangleF(100, 100, 100, 100)
'添加签名域到fields collection
doc.Form.Fields.Add(signaturefield)
'保存文档
doc.SaveToFile("AddSignField.pdf", FileFormat.PDF)