C# 获取PDF中的数字签名证书
作者:E-iceblue 时间:2023-03-07 18:16:15
PDF中的加数字签名是对文档权威性的有效证明。我们在向PDF文档添加签名时,需要准备可信任的签名证书。同时,对已有的签名,可验证签名是否有效,也可以获取文档中的签名证书信息。下面,以C#代码示例展示如何来获取PDF中的数字签名证书信息。
环境准备
需要在程序中导入Spire.Pdf.dll。这里以一个控制台应用程序为例,引用dll可选择以下两种方法中的任意一种即可:
方法1:打开“解决方案资源管理器”,鼠标右键点击“引用”,“添加引用”:
选择“浏览”,“浏览”,并找到本地路径BIN文件夹下的Spire.Pdf.dll文件:
添加到引用列表后,勾选,点击“OK”完成引用:
方法2:通过NuGet安装。
在VS程序中打开“解决方案资源管理器”,鼠标右键点击“引用”,“管理NuGet包”:
点击“搜索”,在搜索框中输入,点击包,安装:
或者通过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余种方法(如下图)来获取证书的详细信息。
(本次代码中仅简单列举使用了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
读取结果
来源:https://www.cnblogs.com/Yesi/p/15554811.html