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

作者:E-iceblue 时间:2023-03-07 18:16:15 

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中的数字签名证书

来源:https://www.cnblogs.com/Yesi/p/15554811.html

标签:C#,PDF,数字签名证书
0
投稿

猜你喜欢

  • Android如何利用RecyclerView实现列表倒计时效果实例代码

    2023-01-24 08:08:53
  • Idea jdk版本问题解决方案

    2022-04-14 11:57:41
  • C#实现简单的Login窗口实例

    2021-07-18 02:23:29
  • 解决Android调用系统分享给微信,出现分享失败,分享多文件必须为图片格式的问题

    2023-07-03 11:08:04
  • android开发教程之view组件添加边框示例

    2023-05-24 17:16:44
  • java中怎样表示圆周率

    2022-11-30 11:20:00
  • java动态口令登录实现过程详解

    2022-01-01 10:16:28
  • Java日常练习题,每天进步一点点(41)

    2023-05-18 18:10:02
  • 解析C#设计模式编程中外观模式Facade Pattern的应用

    2021-08-08 05:10:37
  • Mybatis-Plus的SQL语句组拼原理说明

    2021-07-03 20:39:22
  • SpringSecurity注销设置的方法

    2023-08-05 20:46:15
  • idea maven 项目src下的配置文件没有同步至target的解决操作

    2023-01-19 19:40:19
  • Android实现环形进度条代码

    2023-06-08 11:09:55
  • SpringBoot教程_创建第一个SpringBoot项目

    2022-02-19 23:12:54
  • Android数据持久化之Preferences机制详解

    2021-09-04 23:42:32
  • HashSet和TreeSet使用方法的区别解析

    2022-05-03 12:54:05
  • 如何将IDEA打成jar包并在windows后台运行

    2022-02-27 01:36:57
  • Java递归实现斐波那契数列

    2022-05-03 19:00:11
  • C# 解决datagridview控件显示大量数据拖拉卡顿问题

    2022-03-21 12:52:24
  • C#将Sql数据保存到Excel文件中的方法

    2023-11-11 08:34:26
  • asp之家 软件编程 m.aspxhome.com