C# 獲取PDF中的數(shù)字簽名證書(shū)
PDF中的加數(shù)字簽名是對(duì)文檔權(quán)威性的有效證明。我們?cè)谙騊DF文檔添加簽名時(shí),需要準(zhǔn)備可信任的簽名證書(shū)。同時(shí),對(duì)已有的簽名,可驗(yàn)證簽名是否有效,也可以獲取文檔中的簽名證書(shū)信息。下面,以C#代碼示例展示如何來(lái)獲取PDF中的數(shù)字簽名證書(shū)信息。
環(huán)境準(zhǔn)備
需要在程序中導(dǎo)入Spire.Pdf.dll。這里以一個(gè)控制臺(tái)應(yīng)用程序?yàn)槔?,引用dll可選擇以下兩種方法中的任意一種即可:
方法1:打開(kāi)“解決方案資源管理器”,鼠標(biāo)右鍵點(diǎn)擊“引用”,“添加引用”:

選擇“瀏覽”,“瀏覽”,并找到本地路徑BIN文件夾下的Spire.Pdf.dll文件:


添加到引用列表后,勾選,點(diǎn)擊“OK”完成引用:


方法2:通過(guò)NuGet安裝。
在VS程序中打開(kāi)“解決方案資源管理器”,鼠標(biāo)右鍵點(diǎn)擊“引用”,“管理NuGet包”:

點(diǎn)擊“搜索”,在搜索框中輸入,點(diǎn)擊包,安裝:

或者通過(guò)PM控制臺(tái)安裝:
Install-Package Spire.PDF -Version 7.11.1
代碼示例
實(shí)現(xiàn)讀取簽名的證書(shū),本次代碼主要分為以下步驟:
1. 實(shí)例化PdfDocument類(lèi)的對(duì)象,并通過(guò)PdfDocument. LoadFromFile(string filename)方法加載PDF文檔。
2. 通過(guò)PdfFormWidget. FieldsWidget屬性獲取PdfFormFieldWidgetCollection類(lèi)的域集合
3. 通過(guò)for循環(huán)遍歷所有域,并判斷集合中的域是否為PdfSignatureFieldWidget類(lèi)的簽名域。
4. 獲取PdfSignatureFieldWidget類(lèi)的簽名域后,通過(guò)其提供的PdfSignatureFieldWidget. Signature.Certificate屬性獲取簽名證書(shū),以及該屬性下枚舉的20余種方法(如下圖)來(lái)獲取證書(shū)的詳細(xì)信息。

(本次代碼中僅簡(jiǎn)單列舉使用了2種方法獲取證書(shū)信息。)
5. 最后通過(guò)控制臺(tái)輸出獲取的證書(shū)信息。
C#
using Spire.Pdf;
using Spire.Pdf.Widget;
using System;
namespace GetCertificateInfo
{
class Program
{
static void Main(string[] args)
{
//實(shí)例化PdfDocument類(lèi)的對(duì)象,并加載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];
//獲取簽名證書(shū)
string certificateInfo = signatureFieldWidget.Signature.Certificate.ToString();
//獲取證書(shū)格式
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())
'實(shí)例化PdfDocument類(lèi)的對(duì)象,并加載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)
'獲取簽名證書(shū)
Dim certificateInfo As String = signatureFieldWidget.Signature.Certificate.ToString()
'獲取證書(shū)格式
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
讀取結(jié)果

到此這篇關(guān)于C# 獲取PDF中的數(shù)字簽名證書(shū)的文章就介紹到這了,更多相關(guān)C# 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
輕松學(xué)習(xí)C#的基礎(chǔ)入門(mén)
輕松學(xué)習(xí)C#的基礎(chǔ)入門(mén),了解C#最基本的知識(shí)點(diǎn),C#是一種簡(jiǎn)潔的,類(lèi)型安全的一種完全面向?qū)ο蟮拈_(kāi)發(fā)語(yǔ)言,是Microsoft專(zhuān)門(mén)基于.NET Framework平臺(tái)開(kāi)發(fā)的而量身定做的高級(jí)程序設(shè)計(jì)語(yǔ)言,需要的朋友可以參考下2015-11-11
Entity?Framework使用ObjectContext類(lèi)
這篇文章介紹了Entity?Framework使用ObjectContext類(lèi)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06
C# Onnx實(shí)現(xiàn)輕量實(shí)時(shí)的M-LSD直線(xiàn)檢測(cè)
這篇文章主要為大家詳細(xì)介紹了C#如何結(jié)合Onnx實(shí)現(xiàn)輕量實(shí)時(shí)的M-LSD直線(xiàn)檢測(cè),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11
C#使用StreamReader和StreamWriter類(lèi)讀寫(xiě)操作文件
這篇文章介紹了C#使用StreamReader和StreamWriter類(lèi)讀寫(xiě)操作文件的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05
C#統(tǒng)計(jì)字符串里中文漢字個(gè)數(shù)的方法
這篇文章主要介紹了C#統(tǒng)計(jì)字符串里中文漢字個(gè)數(shù)的方法,本文通過(guò)正則實(shí)現(xiàn)統(tǒng)計(jì)出一段字符串里中文字?jǐn)?shù),需要的朋友可以參考下2014-08-08
Unity3D 計(jì)時(shí)器的實(shí)現(xiàn)代碼(三種寫(xiě)法總結(jié))
這篇文章主要介紹了Unity3D 計(jì)時(shí)器的實(shí)現(xiàn)代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04

