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—
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/357279.html
標籤:C#
下一篇:具有默認陣列鍵值
