PDF文档中可添加数字签名,在添加签名前,需要准备可信任签名证书。对文档中已有的签名,可验证书签是否有效。也可通过一定方法来获取数字签名或者签名证书信息。下面以Java代码示例展示如何读取签名的证书信息。本文将分为两个部分介绍,即编辑代码前的环境配置和具体的代码示例。

一、环境配置

IntelliJ IDEA (jdk 1.8.0)

包含签名的PDF测试文档

Java PDF库:Free Spire.PDF for Java

导入Java库的方法如下:

1.手动导入。

下载库到本地,解压,找到lib文件下的jar文件。然后执行如下图方法手动导入:

二、Java代码示例

代码方法主要分为以下几个主要步骤来读取:

1. 实例化PdfDocument类的对象。

2. 调用PdfDocument.loadFromFile()方法加载指定路径下的已签名的PDF文档。

3. 通过PdfFormWidget. getFieldsWidget()方法获取PdfFormFieldWidgetCollection类的域集合。

4. for循环文档中的域,判断获取的域是否为签名域。如果判定结果为true,则获取文档中的所有PdfSignatureFieldWidget类的签名域。

5. 最后,调用PdfSignatureFieldWidget.getSignature().getCertificate()方法获取签名的证书信息。

import com.spire.pdf.*;
import com.spire.pdf.widget.PdfFormFieldWidgetCollection;
import com.spire.pdf.widget.PdfFormWidget;
import com.spire.pdf.widget.PdfSignatureFieldWidget; public class GetCertificateInfo {
public static void main(String[] args) {
//实例化PdfDocument类的对象,并加载PDF文档
PdfDocument pdf = new PdfDocument();
pdf.loadFromFile("AddSignature.pdf"); //获取域集合
PdfFormWidget pdfFormWidget = (PdfFormWidget)pdf.getForm();
PdfFormFieldWidgetCollection pdfFormFieldWidgetCollection = pdfFormWidget.getFieldsWidget(); //遍历域
for (int i = 0; i < pdfFormFieldWidgetCollection.getCount(); i++)
{
//判定是否为签名域
if (pdfFormFieldWidgetCollection.get(i) instanceof PdfSignatureFieldWidget)
{
//获取签名域
PdfSignatureFieldWidget signatureFieldWidget = (PdfSignatureFieldWidget) pdfFormFieldWidgetCollection.get(i); //获取签名证书信息
String certificateInfo = signatureFieldWidget.getSignature().getCertificate().toString();
System.out.println(certificateInfo);
}
} }
}

执行程序后的读取的证书信息结果:

—End—

Java 获取PDF数字签名证书信息的更多相关文章

  1. java获取https网站证书,附带调用https:webservice接口

    一.java 获取https网站证书: 1.创建一个java工程,新建InstallCert类,将以下代码复制进去 package com; import java.io.BufferedReader ...

  2. java 获取pdf内容

    1. 说明 将pdf中的文字读取处理还有一些限制:1. 文档的安全属性不能过于严格 2. 不能存在图片. 2. 直接贴相关的源码 有两种读取方式,maven对应的pom文件 <dependenc ...

  3. java获取request的头信息

    1.获取全部头信息: //get request headers private Map<String, String> getHeadersInfo() { Map<String, ...

  4. java获取客服端信息(系统,浏览器等)

    String agent = request.getHeader("user-agent"); System.out.println(agent); StringTokenizer ...

  5. JAVA 获取jdbc.properties配置信息

    Properties myProperty = new Properties();String jdbcPath = PathKit.getWebRootPath()+File.separator+& ...

  6. JAVA获取运行环境的信息

    System.getProperties().list(System.out); 得到运行环境的信息

  7. C# 获取PDF中的数字签名证书

    PDF中的加数字签名是对文档权威性的有效证明.我们在向PDF文档添加签名时,需要准备可信任的签名证书.同时,对已有的签名,可验证签名是否有效,也可以获取文档中的签名证书信息.下面,以C#代码示例展示如 ...

  8. Java获取操作系统信息

    今天在看jdk的demo时候发现java获取系统操作系统的一些信息,例如内存使用情况,于是自己也想研究研究! 百度一番,发现有2种方法! 1.sun自带的API 2.第三方jar(Sigar)   先 ...

  9. 【java 获取数据库信息】获取MySQL或其他数据库的详细信息

    1.首先是 通过数据库获取数据表的详细列信息 package com.sxd.mysqlInfo.test; import java.sql.Connection; import java.sql.D ...

随机推荐

  1. 为什么 Dapr 如此令人兴奋

    如今你构建软件,您可以从数量众多的云服务中进行选择.仅 AWS 就每个月都在不断为其200多项服务添加新服务,而其他云提供商也都在跟上. 如果您的公司想与您的竞争对手竞争,您就需要充分利用这些服务,这 ...

  2. Sentry 监控 - 全栈开发人员的分布式跟踪 101 系列教程(第一部分)

    系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...

  3. [源码解析] PyTorch 流水线并行实现 (5)--计算依赖

    [源码解析] PyTorch 流水线并行实现 (5)--计算依赖 目录 [源码解析] PyTorch 流水线并行实现 (5)--计算依赖 0x00 摘要 0x01 前文回顾 0x02 计算依赖 0x0 ...

  4. Python:安装opencv出现错误Could not find a version that satisfies the requirement numpy==1.13.3 (from versions: 1.14.5, 1.14.6, 1.15.0rc2, 1.15.0, 1.15.1, 1.15.2, 1.15.3, 1.15.4, 1.16.0rc1, 1.16.0rc2,

    安装opencv的时候,出现numpy的版本不匹配,卸载了不匹配的版本,重新安装却是一点用都没有,后面尝试了一下这里的提示pip更新,居然安装成功了,看来pip的版本过低真是误事啊. 报错是: Cou ...

  5. C++核心编程 4 类和对象-对象的初始化和清理

    构造函数和析构函数 对象的初始化和清理工作是两个非常重要的安全问题,一个对象或者变量没有初始状态,对其使用结果是未知的,同样,使用完一个对象或变量,没有及时清理,也会造成一定的安全问题.C++利用了构 ...

  6. appium启动ios系统上面的app需求的参数

    Appium启动APP至少需要7个参数  'platformVersion','deviceName'.'udid'.'bundleId'.'platformName'.'automationName ...

  7. SpringMVC 获得请求数据

    获得请求参数 客户端请求参数的格式是:name=value&name=value- - 服务器端要获得请求的参数,有时还需要进行数据的封装,SpringMVC可以接收如下类型的参数: 基本类型 ...

  8. Shadertoy 教程 Part 1 - 介绍

    Note: This series blog was translated from Nathan Vaughn's Shaders Language Tutorial and has been au ...

  9. Codeforces Round #750 (Div. 2)

    Codeforces Round #750 (Div. 2) A. Luntik and Concerts 思路分析: 首先我们可以肯定的是a,b,c都大于等于1,所以我们先让它们自己抵消自己,最后a ...

  10. [对对子队]会议记录5.17(Scrum Meeting4)

    今天已完成的工作 何瑞 ​ 工作内容:实现选择组件,搭建第7关 ​ 相关issue:实现选择组件 ​ 相关签入:feature:完成Lv7的UI搭建 吴昭邦 ​ 工作内容:实现选择组件,搭建第7关 ​ ...