使用数字证书文件签名
请先打开CaseStyudy目录下的文件"PDFCreator示例.Table"后再运行本节的示例代码。
有了数字证书文件,我们就可以对PDF文档进行签名。
用户无法直接修改有签名的PDF文档,如果要修改,只能创建副本,但是副本会丢失签名,恶意方即使伪造签名,我们也可以通过签名的证书指纹识别出这是伪造的签名。
我们可以使用文字进行数字签名:
Dim
file
As
String
=
"c:\temp\test.pdf"
Dim
pdc
As
New
PDFCreator()
pdc.PageSize =
New
Size(400, 500)
Dim
rect
As
RectangleF = pdc.PageRectangle()
rect.Inflate( - 72, - 72)
pdc.DrawString("Hello
Foxtable!",
New
Font("微软雅黑",
24, fontstyle.Bold), Brushes.Black, rect)
Dim
sign
As
New
PDF.PdfSignature()
'创建签名
sign.Certificate =
New
X509Certificate2(ProjectPath &
"myCertificate.pfx",
"1234567")
'加载证书文件
sign.Font =
New
Font("Rage
Italic",
18)
sign.Text =
"Power
By Foxtable"
pdc.AddField(sign,
New
RectangleF(rect.Right - 130, rect.Bottom - 25, 130, 25))
'将签名添加到文档中
pdc.Save(file)
Process.Start(file)
我们也可以使用图片(例如领导的手写签名)进行数字签名,图片请下复制项目文件夹的Images子目录中,例如:
Dim
file
As
String
=
"c:\temp\test.pdf"
Dim
pdc
As
New
PDFCreator()
pdc.PageSize =
New
Size(400, 500)
Dim
rect
As
RectangleF = pdc.PageRectangle()
rect.Inflate( - 72, - 72)
pdc.DrawString("Hello
Foxtable!",
New
Font("微软雅黑",
24, fontstyle.Bold), Brushes.Black, rect)
Dim
sign
As
New
PDF.PdfSignature()
'创建签名
sign.Certificate =
New
X509Certificate2(ProjectPath &
"myCertificate.pfx",
"1234567")
'加载证书文件
sign.Font =
New
Font("Rage
Italic",
18)
sign.Image = GetImage("zhangziyi.png")
pdc.AddField(sign,
New
RectangleF(rect.Right - 80, rect.Bottom - 25, 80, 25))
'将签名添加到文档中
pdc.Save(file)
'保存文件
Process.Start(file)
'打开文件
有的软件,能直接显示签名,例如上面生成的文档在WPS中会显示为:
用户单击签名,可以显示签名的数字证书信息。
有的软件,例如Adobe Acrobat Reader DC免费版,不会显示数字签名的文字或图片,所以我们看不到签名,但是会显示一个签名面板,我们可以在这里查看签名以及数字证书信息。