C# 获取PDF中的数字签名证书
作者:E-iceblue 发布时间:2023-03-07 18:16:15
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
读取结果
来源:https://www.cnblogs.com/Yesi/p/15554811.html


猜你喜欢
- 泛型代码可以让你写出根据自我需求定义、适用于任何类型的,灵活且可重用的函数和类型。它可以让你避免重复的代码,用一种清晰和抽象的方式来表达代码
- 代码如下: package swt_jface.demo9; import org.eclipse.swt.SWT; import org.
- 前言在 App 的运营中,活跃度是一个重要的指标,日活/月活……为了提高活跃度,就发明了小红点,
- 近年来,二维码的使用越来越风生水起,笔者最近手头也遇到了一个需要使用二维码扫码登录网站的活,所以研究了一下这一套机制,并用代码实现了整个流程
- 以上是集成测试后的Jprofiler演示效果图今晚想在IDEA中集成一下JProfiler11(现在有12版本了)工具,去网上看了下都是老版
- MyBatis在注解上使用动态SQL1、用script标签包围然后像xml语法一样书写@Select({"<script&g
- 先看效果:输入内容,点击生成二维码:点击logo图案:代码:QRCodeUtil:package com.example.administr
- java实现数字转大写的方法说明:将数字金额转大写,如下:public class Test { /** *
- 突然需要改一堆文件的后缀名,所以想编程解决,话不多说直接上代码javaimport java.io.File;import java.uti
- 0 实验环境在Android Studio中进行有关代码的编写和界面效果展示。SQLite数据库的图形化工具SQLiteStudio下载网址
- 在Android开发中,往往要用到自定义的控件来实现我们的需求或效果。在使用自定义 控件时,难免要用到自定义属性,那怎么使用自定义属性呢?在
- 最近在进行android开发过程中,在将 Intent传递给调用的组件并完成组件的调用时遇到点困难,并且之前对Intent的学习也是一知半解
- 一:item的根布局设置Android:clickable="true",之后导致item点击事件失效,对根
- 对Android的SD卡进行读取权限设置时: <uses-permission android:name="android.
- @ConfigurationProperties加载外部配置@ConfigurationProperties可以将外部配置文件(比如appl
- 添加NuGet包选择最新版就好了安装完成后右键项目重新生成方案使用OpenCvSharp.CPlusPlus命名空间using OpenCv
- 使用@Tolerate实现冲突兼容使用Lombok能够减少程序员的重复工作提高工作效率,而Lombok的注解基本是基于标准的(如,标准的Bu
- 这篇文章主要介绍了dotnet core链接mongodb代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价
- 现在由于GWF,google基本和咱们说咱见了,就给
- 好几年没写博客了,很多知识不记是真的会忘记,以后还是保持写博客的习惯吧。坚持不一定成功,但放弃一定很舒服!(开玩笑(#^.^#))回归正题,