ITPub博客

首页 > 应用开发 > .net > C# 获取PDF中的数字签名证书

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

原创 .net 作者:Mia张 时间:2021-11-11 17:20:38 0 删除 编辑

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

环境准备

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

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

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

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


方法2:通过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

读取结果:


—End—



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31499788/viewspace-2841794/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2017-10-27

  • 博文量
    128
  • 访问量
    85687