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

😂 这篇文章最后更新于743天前,您需要注意相关的内容是否还可用。
目录导航
  • Java读取PDF信息文本,获取电子签章信息
    • 依赖配置
      • 收费版
      • 免费版
      • Jar包导入
    • 读取电子签名信息示例
  • 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