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


    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

    读取结果:

     

     —End—

  • 相关阅读:
    【NLP_Stanford课堂】最小编辑距离
    【NLP_Stanford课堂】句子切分
    【NLP_Stanford课堂】词形规范化
    【NLP_Stanford课堂】分词
    【NLP_Stanford课堂】正则表达式
    【Python自然语言处理】第一章学习笔记——搜索文本、计数统计和字符串链表
    【C++ Primer】详解C++和C中的float中的有效数字
    【C++ Primer】读书笔记_第一章
    【SQL Server 2012】按倒序存储“分组统计”结果的临时表到新建表
    Git学习
  • 原文地址:https://www.cnblogs.com/Yesi/p/15554811.html
Copyright © 2020-2023  润新知