C# 获取PDF中的数字签名证书

  • A+
所属分类:.NET技术
摘要

PDF中的加数字签名是对文档权威性的有效证明。我们在向PDF文档添加签名时,需要准备可信任的签名证书。同时,对已有的签名,可验证签名是否有效,也可以获取文档中的签名证书信息。下面,以C#代码示例展示如何来获取PDF中的数字签名证书信息。

PDF中的加数字签名是对文档权威性的有效证明。我们在向PDF文档添加签名时,需要准备可信任的签名证书。同时,对已有的签名,可验证签名是否有效,也可以获取文档中的签名证书信息。下面,以C#代码示例展示如何来获取PDF中的数字签名证书信息。

环境准备

需要在程序中导入Spire.Pdf.dll。这里以一个控制台应用程序为例,引用dll可选择以下两种方法中的任意一种即可:

方法1:打开“解决方案资源管理器”,鼠标右键点击“引用”,“添加引用”:

C# 获取PDF中的数字签名证书

选择“浏览”,“浏览”,并找到本地路径BIN文件夹下的Spire.Pdf.dll文件:

C# 获取PDF中的数字签名证书

 C# 获取PDF中的数字签名证书

 

添加到引用列表后,勾选,点击“OK”完成引用:

C# 获取PDF中的数字签名证书

C# 获取PDF中的数字签名证书

 

方法2:通过NuGet安装。

在VS程序中打开“解决方案资源管理器”,鼠标右键点击“引用”,“管理NuGet包”:

C# 获取PDF中的数字签名证书

 

点击“搜索”,在搜索框中输入,点击包,安装:

C# 获取PDF中的数字签名证书

 

或者通过PM控制台安装:

Install-Package Spire.PDF -Version 7.11.1

 

代码示例

 实现读取签名的证书,本次代码主要分为以下步骤:

1. 实例化PdfDocument类的对象,并通过PdfDocument. LoadFromFile(string filename)方法加载PDF文档。

2. 通过PdfFormWidget. FieldsWidget属性获取PdfFormFieldWidgetCollection类的域集合

3. 通过for循环遍历所有域,并判断集合中的域是否为PdfSignatureFieldWidget类的签名域。

4. 获取PdfSignatureFieldWidget类的签名域后,通过其提供的PdfSignatureFieldWidget. Signature.Certificate属性获取签名证书,以及该属性下枚举的20余种方法(如下图)来获取证书的详细信息。

C# 获取PDF中的数字签名证书

(本次代码中仅简单列举使用了2种方法获取证书信息。)

5. 最后通过控制台输出获取的证书信息。

C#

using Spire.Pdf; using Spire.Pdf.Widget; using System;  namespace GetCertificateInfo {     class Program     {         static void Main(string[] args)         {             //实例化PdfDocument类的对象,并加载PDF文档             PdfDocument pdf = new PdfDocument();             pdf.LoadFromFile("test.pdf");              //获取域集合             PdfFormWidget pdfFormWidget = (PdfFormWidget)pdf.Form;             PdfFormFieldWidgetCollection pdfFormFieldWidgetCollection = pdfFormWidget.FieldsWidget;              //遍历域             for (int i = 0; i < pdfFormFieldWidgetCollection.Count; i++)             {                 //判定是否为签名域                 if (pdfFormFieldWidgetCollection[i] is PdfSignatureFieldWidget)                 {                     //获取签名域                     PdfSignatureFieldWidget signatureFieldWidget = (PdfSignatureFieldWidget)pdfFormFieldWidgetCollection[i];                      //获取签名证书                     string certificateInfo = signatureFieldWidget.Signature.Certificate.ToString();                                          //获取证书格式                     string format = signatureFieldWidget.Signature.Certificate.GetFormat();                      Console.WriteLine(certificateInfo+ "n"+ "[CertificateFormat]n " + format );                 }             }             Console.ReadKey();                   }     } }

VB.NET

Imports Spire.Pdf Imports Spire.Pdf.Widget  Namespace GetCertificateInfo     Class Program         Private Shared Sub Main(args As String())             '实例化PdfDocument类的对象,并加载PDF文档             Dim pdf As New PdfDocument()             pdf.LoadFromFile("test.pdf")              '获取域集合             Dim pdfFormWidget As PdfFormWidget = DirectCast(pdf.Form, PdfFormWidget)             Dim pdfFormFieldWidgetCollection As PdfFormFieldWidgetCollection = pdfFormWidget.FieldsWidget              '遍历域             For i As Integer = 0 To pdfFormFieldWidgetCollection.Count - 1                 '判定是否为签名域                 If TypeOf pdfFormFieldWidgetCollection(i) Is PdfSignatureFieldWidget Then                     '获取签名域                     Dim signatureFieldWidget As PdfSignatureFieldWidget = DirectCast(pdfFormFieldWidgetCollection(i), PdfSignatureFieldWidget)                      '获取签名证书                     Dim certificateInfo As String = signatureFieldWidget.Signature.Certificate.ToString()                      '获取证书格式                     Dim format As String = signatureFieldWidget.Signature.Certificate.GetFormat()                      Console.WriteLine(Convert.ToString((certificateInfo & Convert.ToString(vbLf)) + "[CertificateFormat]" & vbLf & " ") & format)                 End If             Next             Console.ReadKey()         End Sub     End Class End Namespace

读取结果:

C# 获取PDF中的数字签名证书

 

 —End—