天天看點

C# / VB.NET 擷取PDF文檔的數字簽名資訊

文檔中的數字簽名具有不可否認性,可有效防僞防篡改。對文檔中已有的數字簽名資訊,可通過一定方法擷取,下面通過程式代碼介紹如何來實作。程式中,使用了Spire.PDF.dll,版本:6.11.6,可自行在官網下載下傳包,或者通過Nuget下載下傳。下載下傳後,在程式中添加引用dll檔案。如下添加引用效果:

C# / VB.NET 擷取PDF文檔的數字簽名資訊

完成dll檔案添加引用後,可參考如下代碼來操作:

[C#]

using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.Security;
using Spire.Pdf.Widget;
using System;
using System.Drawing;

namespace GetSignature
{
    class Program
    {
        static void Main(string[] args)
        {

            //建立PdfDocument執行個體
            PdfDocument pdf = new PdfDocument();
            //加載含有簽名的PDF檔案
            pdf.LoadFromFile("數字簽名.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];
                    //擷取簽名
                    PdfSignature signature = signatureFieldWidget.Signature;
                    String location = signature.LocationInfo;
                    String reason = signature.Reason;
                    String data = signature.Date.ToString();

                    Console.WriteLine("簽名位置資訊:" + location + "\n" +
                            "簽名原因:" + reason + "\n" +
                            "簽名日期:" + data + "\n" +
                            "文檔中的簽名坐标:X = " + signatureFieldWidget.Location.X + "  Y = " + signatureFieldWidget.Location.Y);
                    Console.ReadLine();
                }
            }

        }
    }
}      

[VB.NET]

Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports Spire.Pdf.Security
Imports Spire.Pdf.Widget
Imports System.Drawing

Namespace GetSignature
    Class Program
        Private Shared Sub Main(args As String())

            '建立PdfDocument執行個體
            Dim pdf As New PdfDocument()
            '加載含有簽名的PDF檔案
            pdf.LoadFromFile("數字簽名.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 signature As PdfSignature = signatureFieldWidget.Signature
                    Dim location As [String] = signature.LocationInfo
                    Dim reason As [String] = signature.Reason
                    Dim data As [String] = signature.[Date].ToString()

                    Console.WriteLine("簽名位置資訊:" + location + vbLf + "簽名原因:" + reason + vbLf + "簽名日期:" + data + vbLf + "文檔中的簽名坐标:X = " + signatureFieldWidget.Location.X + "  Y = " + signatureFieldWidget.Location.Y)
                    Console.ReadLine()
                End If
            Next

        End Sub
    End Class
End Namespace      

數字簽名資訊擷取結果:

C# / VB.NET 擷取PDF文檔的數字簽名資訊

相關閱讀推薦: C# 給PDF文檔添加數字簽名

繼續閱讀