Java读取PDF信息文本,获取电子签章信息

Java读取PDF信息文本,获取电子签章信息

使用Spire组件,参考如下中文官网,分为免费版和付费版,根据自己需求而定。

依赖配置

收费版

在 pom.xml 文件中配置 Maven 仓库路径。

<repositories>
        <repository>
            <id>com.e-iceblue</id>
            <name>e-iceblue</name>
            <url>https://repo.e-iceblue.cn/repository/maven-public/</url>
        </repository>
</repositories>

然后,在 pom.xml 文件中指定 Spire 产品的 Maven 依赖。如下列举了几种产品的配置方式,可参考使用。

配置 Spire.PDF for Java

<dependencies>
    <dependency>
        <groupId> e-iceblue </groupId>
        <artifactId>spire.pdf</artifactId>
        <version>5.4.0</version>
    </dependency>
</dependencies>

免费版

如需配置 Spire 产品的免费版本 jar 包,只需更改 artifactIdversion 信息即可,如下配置方法:

配置 Free Spire.PDF for Java

<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.pdf.free</artifactId>
        <version>5.1.0</version>
    </dependency>
</dependencies>

完整配置参考:通过 Maven 仓库安装 Spire 系列 Java 产品 (e-iceblue.cn)

Jar包导入

当然你也可以直接导入jar包使用,仓库:Search - Nexus Repository Manager (e-iceblue.cn)

读取电子签名信息示例

import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.security.PdfCertificate;
import com.spire.pdf.security.PdfSignature;
import com.spire.pdf.security.X509NameType;
import com.spire.pdf.widget.PdfFieldWidget;
import com.spire.pdf.widget.PdfFormFieldWidgetCollection;
import com.spire.pdf.widget.PdfFormWidget;
import com.spire.pdf.widget.PdfSignatureFieldWidget;

import java.awt.*;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;

public class pdfTest {
    public static void main(String[] args) {
        PdfDocument pdf = new PdfDocument();
        pdf.loadFromFile("示例.pdf");//路径加载PDF文件
        //获取域集合
        PdfFormWidget widgets = (PdfFormWidget) pdf.getForm();
        PdfFormFieldWidgetCollection fieldWidgetCollection = widgets.getFieldsWidget();
        for (int i = 0; i < fieldWidgetCollection.getCount(); i++) {
            PdfFieldWidget widget = (PdfFieldWidget) fieldWidgetCollection.get(i);
            if (widget instanceof PdfSignatureFieldWidget) {
                PdfSignatureFieldWidget signatureFieldWidget = (PdfSignatureFieldWidget) widget;
                //获取签名信息
                PdfSignature signature = signatureFieldWidget.getSignature();
                PdfCertificate certificate = signatureFieldWidget.getSignature().getCertificate();
                String certificateInfo = certificate.toString();
//                System.out.println(certificateInfo);
//                获取证书颁发者字段(subject)
//                System.out.println("subject:" + certificate.getSubject());
//              第二个参数为true颁发者 false为颁发给的单位
//                System.out.println(certificate.getNameInfo(X509NameType.SimpleName, true));
//                System.out.println(certificate.getNameInfo(X509NameType.SimpleName, false));
                String location = signature.getLocationInfo();
                String reason = signature.getReason();
                String data = signature.getDate().toString();
                String name = signature.getSignatureName();
                PdfPageBase page = signatureFieldWidget.getPage();
                System.out.println("签名位置信息:" + location + "\n" +
                        "签名原因:" + reason + "\n" +
                        "签名日期:" + data + "\n" +
                        "签名人:" + name + "\n" +
                        "颁发给:" + certificate.getNameInfo(X509NameType.SimpleName, false) + "\n" +
                        "文档中的签名坐标:X = " + signatureFieldWidget.getLocation().getX() + "  Y = " + signatureFieldWidget.getLocation().getY()
                );
                //获取页面索引
                int pageIndex = pdf.getPages().indexOf(page) + 1;
                int count = pdf.getPages().getCount();
                System.out.println("签名所在页:" + pageIndex + "/" + count);
            }
        }

    }
}

详细文档:Spire.PDF for Java 中文教程 (e-iceblue.cn)

其它参考:

X509NameType 枚举 (System.Security.Cryptography.X509Certificates) | Microsoft Docs

目录导航
  • Java读取PDF信息文本,获取电子签章信息
    • 依赖配置
      • 收费版
      • 免费版
      • Jar包导入
    • 读取电子签名信息示例