服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C# 获取PDF中的数字签名证书

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

2022-12-12 11:31E-iceblue C#

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

到此这篇关于C# 获取PDF中的数字签名证书的文章就介绍到这了,更多相关C# 内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://www.cnblogs.com/Yesi/p/15554811.html

延伸 · 阅读

精彩推荐
  • C#深入理解C#之接口

    深入理解C#之接口

    这篇文章主要介绍了C#接口(Interface)用法,较为详细的分析了C#中接口的功能、实现及使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    佳园5232022-11-24
  • C#C#中API调用的多种方法

    C#中API调用的多种方法

    今天通过本文给大家分享C#中API调用的多种方法,通过API进行解析扫入的二维码,实例代码给大家介绍的非常详细,需要的朋友参考下吧...

    caoguanghui08046092022-12-01
  • C#OpenCvSharp实现Mat对象简单的像素操作

    OpenCvSharp实现Mat对象简单的像素操作

    这篇文章主要介绍了OpenCvSharp实现Mat对象简单的像素操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋...

    haixin-5618852022-10-17
  • C#Unity Shader实现素描风格的渲染

    Unity Shader实现素描风格的渲染

    这篇文章主要为大家详细介绍了Unity Shader实现素描风格的渲染,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    vvc223c10592022-09-06
  • C#C#语句先后顺序对程序的结果有影响吗

    C#语句先后顺序对程序的结果有影响吗

    有朋友问我,C#中C#语句先后顺序影响程序的结果吗?告诉大家,答案是肯定的,绝对影响程序的结果,所以在程序中一定要注意C#语句的顺序...

    刘要直10442021-11-01
  • C#Unity3D实现NavMesh导航网格寻路

    Unity3D实现NavMesh导航网格寻路

    这篇文章主要为大家详细介绍了Unity3D实现NavMesh导航网格寻路,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Gary_Leong10702022-09-07
  • C#C#和lua相互调用的方法教程

    C#和lua相互调用的方法教程

    lua是一种脚本语言,可以方便的移植到各种宿主语言中,并且可以支持热更新,在游戏开发中也能当做主要的语言来编写游戏的逻辑,所以这篇文章主要给...

    Mr.小Y5092022-01-25
  • C#详解C#对XML、JSON等格式的解析

    详解C#对XML、JSON等格式的解析

    这篇文章主要介绍了详解C#对XML、JSON等格式的解析,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。...

    极简10032021-12-13