C# 获取PDF中的数字签名证书
PDF中的加数字签名是对文档权威性的有效证明。我们在向PDF文档添加签名时,需要准备可信任的签名证书。同时,对已有的签名,可验证签名是否有效,也可以获取文档中的签名证书信息。下面,以C#代码示例展示如何来获取PDF中的数字签名证书信息。
环境准备
需要在程序中导入域名。这里以一个控制台应用程序为例,引用dll可选择以下两种方法中的任意一种即可:
方法1:打开“解决方案资源管理器”,鼠标右键点击“引用”,“添加引用”:
选择“浏览”,“浏览”,并找到本地路径下的域名文件:
添加到引用列表后,勾选,点击“OK”完成引用:
方法2:通过NuGet安装。
在VS程序中打开“解决方案资源管理器”,鼠标右键点击“引用”,“管理NuGet包”:
点击“搜索”,在搜索框中输入,点击包,安装:
或者通过PM控制台安装:
Install-Package 域名 -Version 域名.1
代码示例
实现读取签名的证书,本次代码主要分为以下步骤:
1. 实例化PdfDocument类的对象,并通过PdfDocument. LoadFromFile(string filename)方法加载PDF文档。
2. 通过PdfFormWidget. FieldsWidget属性获取PdfFormFieldWidgetCollection类的域集合
3. 通过for循环遍历所有域,并判断集合中的域是否为PdfSignatureFieldWidget类的签名域。
4. 获取PdfSignatureFieldWidget类的签名域后,通过其提供的PdfSignatureFieldWidget. 域名ificate属性获取签名证书,以及该属性下枚举的20余种方法(如下图)来获取证书的详细信息。
(本次代码中仅简单列举使用了2种方法获取证书信息。)
5. 最后通过控制台输出获取的证书信息。
C#
using 域名; using 域名et; using System; namespace GetCertificateInfo { class Program { static void Main(string[] args) { //实例化PdfDocument类的对象,并加载PDF文档 PdfDocument pdf = new PdfDocument(); 域名FromFile("域名"); //获取域集合 PdfFormWidget pdfFormWidget = (PdfFormWidget)域名; PdfFormFieldWidgetCollection pdfFormFieldWidgetCollection = 域名dsWidget; //遍历域 for (int i = 0; i < 域名t; i++) { //判定是否为签名域 if (pdfFormFieldWidgetCollection[i] is PdfSignatureFieldWidget) { //获取签名域 PdfSignatureFieldWidget signatureFieldWidget = (PdfSignatureFieldWidget)pdfFormFieldWidgetCollection[i]; //获取签名证书 string certificateInfo = 域名域名ring(); //获取证书格式 string format = 域名域名ormat(); 域名eLine(certificateInfo+ "\n"+ "[CertificateFormat]\n " + format ); } } 域名Key(); } } }
域名
Imports 域名 Imports 域名et Namespace GetCertificateInfo Class Program Private Shared Sub Main(args As String()) \'实例化PdfDocument类的对象,并加载PDF文档 Dim pdf As New PdfDocument() 域名FromFile("域名") \'获取域集合 Dim pdfFormWidget As PdfFormWidget = DirectCast(域名, PdfFormWidget) Dim pdfFormFieldWidgetCollection As PdfFormFieldWidgetCollection = 域名dsWidget \'遍历域 For i As Integer = 0 To 域名t - 1 \'判定是否为签名域 If TypeOf pdfFormFieldWidgetCollection(i) Is PdfSignatureFieldWidget Then \'获取签名域 Dim signatureFieldWidget As PdfSignatureFieldWidget = DirectCast(pdfFormFieldWidgetCollection(i), PdfSignatureFieldWidget) \'获取签名证书 Dim certificateInfo As String = 域名域名ring() \'获取证书格式 Dim format As String = 域名域名ormat() 域名eLine(域名ring((certificateInfo & 域名ring(vbLf)) + "[CertificateFormat]" & vbLf & " ") & format) End If Next 域名Key() End Sub End Class End Namespace
读取结果:
—End—