首页 > 编程语言 >PDF数字签名信息获取(Java)

PDF数字签名信息获取(Java)

时间:2024-01-11 09:13:35浏览次数:32  
标签:Java String 数字签名 spire 签名 signature PDF pdf com

利用Java代码,读取PDF内的签名信息,包括签发单位、Thumbprint、签发时间等信息。

此处使用了Spire.PDF的相关依赖,Maven项目可使用以下方式引入,或者直接导入相关jar包即可。

<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.cn/repository/maven-public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.pdf</artifactId>
        <version>10.1.3</version>
    </dependency>
</dependencies>

以下为代码,基本上官方文档内容(https://www.e-iceblue.cn/pdf_java_security/get-signature-info-of-pdf-document-using-java.html),增加了签名信息部分:

import com.spire.pdf.PdfDocument;
import com.spire.pdf.security.PdfSignature;
import com.spire.pdf.widget.PdfFormFieldWidgetCollection;
import com.spire.pdf.widget.PdfFormWidget;
import com.spire.pdf.widget.PdfSignatureFieldWidget;

public class GetSignature {
    public static void main(String[] args) {
        //创建PdfDocument实例
        PdfDocument pdf = new PdfDocument();
        //加载含有签名的PDF文件
        pdf.loadFromFile("D://1.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);
                //获取签名
                PdfSignature signature = signatureFieldWidget.getSignature();
                String location = signature.getLocationInfo();
                String reason = signature.getReason();
                String data = signature.getDate().toString();
                String name = signature.getSignatureName();
                String certificateInfo = signature.getCertificate().toString();

                // 签名的基础信息
                System.out.println("签名位置信息:" + location + "\n" +
                        "签名原因:" + reason + "\n" +
                        "签名日期:" + data + "\n" +
                        "签名人:" + name + "\n" +
                        "文档中的签名坐标:X = " + signatureFieldWidget.getLocation().getX() + "  Y = " + signatureFieldWidget.getLocation().getY());
                // 签名证书的相关内容
                System.out.println(certificateInfo);
            }
        }
    }
}

 

标签:Java,String,数字签名,spire,签名,signature,PDF,pdf,com
From: https://www.cnblogs.com/sefuture/p/17957765

相关文章

  • 如何使用WebSocket和JavaScript实现在线人脸识别系统
    Laravel是一个流行的PHP框架,它具有出色的可测试性,可以帮助开发人员在更短的时间内编写可靠的代码。但是,即使使用了这个框架,也可能会出现测试覆盖率较低的情况。测试覆盖率是指代码中已由测试案例覆盖的部分比例。测试覆盖率越高,代码质量越高。在本文中,我们将分享几种技巧,帮助您提......
  • 掌握Java Future模式及其灵活应用
    第1章:引言大家好,我是小黑,今天咱们来聊聊Future。咱们程序员在日常工作中,肯定都遇到过需要处理耗时任务的情况,特别是在Java领域。比如说,小黑要从网络上下载数据,或者要执行一个计算密集型任务,这些操作都可能需要花费一些时间。在这种场景下,如果小黑还要保持程序的响应性,就得用到异......
  • 优雅处理并发:Java CompletableFuture最佳实践
    第1章:引言大家好,我是小黑,今天,小黑要和大家聊聊CompletableFuture,这个Java8引入的强大工具。在Java传统的Future模式里,咱们都知道,一旦开始了一个异步操作,就只能等它结束,无法知道执行情况,也不能手动完成或者取消。而CompletableFuture呢,就像它的名字一样,是可以"完全控制"的Futur......
  • 《实战Java虚拟机 JVM故障诊断与性能优化》读书
    最近读了《实战Java虚拟机JVM故障诊断与性能优化》这本书,有一些收获,特此记录1.有Java虚拟机规范,各大厂商根据规范自己实现VM,大家平常用的是Hotspot2.堆一般分为新生代,老年代。新生代里又分成伊甸园区,from区,to区。一般对象是在伊甸园区出生,经过垃圾回收进入fromto老年代3.J......
  • java.lang.RuntimeException: setParameters failed 解读
    解决java.lang.RuntimeException:setParametersfailed错误在Java开发中,当我们使用相机(Camera)功能进行拍照或录像时,有时可能会遇到java.lang.RuntimeException:setParametersfailed这样的错误。这个错误通常表示相机参数设置失败,导致无法进行预期的相机操作。本篇文章将介绍可......
  • Javassist实例
    Javassist强调源代码层次操作字节码的框架。利用Javassist实现字节码增强时,可以无须关注字节码的结构,其优点在于编简单。直接使用Java编程的形式,而不需要了解虚拟机指令,就能动态改变类的结构或者动态生成的类。其中最重要的是ClassPool、CtClass、CtMethod、CtField这四个类:CtClass......
  • Java字节码文件查看常用工具​
    04.字节码常用工具javap-v命令javap是JDK自带的反编译工具,可以通过控制台查看字节码文件的内容。适合在服务器上查看字节码文件内容。直接输入javap查看所有参数。输入javap-v字节码文件名称查看具体的字节码信息。(如果是jar包需要先使用jar-xvf命令解压)jclasslib的idea插件j......
  • 【从零开始重学Java】第11天
    前情提示从零开始重学Java第0天从零开始重学Java第1天从零开始重学Java第2天从零开始重学Java第3天从零开始重学Java第4天从零开始重学Java第5天从零开始重学Java第6天从零开始重学Java第7天从零开始重学Java第8_9_10天Java数据流关于文件的操作建议使用新的......
  • Java学习积累
    Java学习积累对象判空在判断获取的信息是否为空时需要注意字段类型的区别如果是String类型变量需要采用string==nullStrUtil.isEmpty(string)StringUtils.isEmpty一种是JDKString包中的内容一种是Springboot中的内容(可能5.3版本之后这个方法就没有用了)在判断......
  • 2024年1月Java项目开发指南1:环境与工具准备
    准备工作基础能力开发能力的事咱先不谈,有两个基础技能要学一下。1.学习使用Markdown编写文档2.学会使用git拉取代码和提交代码软件准备电脑需要安装以下软件:IDEA2023.2及其以上(Java开发统一使用IDEA)Webstorm2023.2及其以上(也可以使用VScode或者Hbuilder或者Dreamweav......