文檔中的數字簽名具有不可否認性,可有效防偽防篡改。對文檔中已有的數字簽名信息,可通過一定方法獲取,下面通過程序代碼介紹如何來實現。程序中,使用了Spire.PDF.dll,版本:6.11.6,可自行在官網下載包,或者通過Nuget下載。下載后,在程序中添加引用dll文件。如下添加引用效果:
完成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.PdfImports Spire.Pdf.GraphicsImports Spire.Pdf.SecurityImports Spire.Pdf.WidgetImports System.DrawingNamespace 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 ClassEnd Namespace
數字簽名信息獲取結果:
相關閱讀推薦: C# 給PDF文檔添加數字簽名