zoukankan      html  css  js  c++  java
  • Java 获取PDF中的数字签名信息

    一、概述及程序环境要求

    本文以Java代码演示如何获取PDF文档中的数字签名信息,包括签名人、签名位置、日期、原因、联系方式、签名在文档中的坐标等等。

    程序环境包括:

    • Spire.Pdf.jar(jar版本:3.11.6
    • Jdk 1.8.0(版本要求>=1.6.0版本即可)
    • IDEA

    编辑代码前先导入jar到Java程序,两种导入方法供选择,可按需任选其一即可:

    1. 下载jar包导入:下载后解压到指定路径,并将lib文件夹下的spire.pdf.jar手动导入Java程序;

    2. maven程序中配置pom.xml文件,指定spire的maven路径及依赖,参考如下:

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

    配置完成后,导入jar到程序。

     

    注:程序环境可不用安装Adobe Acrobat

    二、Java代码

    import com.spire.pdf.*;
    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("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);
                    //获取签名
                    PdfSignature signature = signatureFieldWidget.getSignature();
                    String location = signature.getLocationInfo();
                    String reason = signature.getReason();
                    String data = signature.getDate().toString();
                    String name = signature.getSignatureName();
    
                    System.out.println("签名位置信息:"+ location +"
    "+
                            "签名原因:" + reason +"
    "+
                            "签名日期:"+ data +"
    "+
                            "签名人:"+ name +"
    "+
                            "文档中的签名坐标:X = "+ signatureFieldWidget.getLocation().getX()+ "  Y = "+ signatureFieldWidget.getLocation().getY()
                           );
                }
            }
        }
    }

    签名获取结果:

    相关阅读推荐Java 添加及验证PDF数字签名

  • 相关阅读:
    php Windows系统 wamp集成环境下redis的使用
    IO流文件拷贝
    IO流框架
    Map集合
    泛型
    Deque(队列)
    List接口
    Iterator接口(迭代器)
    Java中的异常详解
    Java中的正则表达式
  • 原文地址:https://www.cnblogs.com/Yesi/p/14107362.html
Copyright © 2011-2022 走看看