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 包,只需更改 artifactId 和 version 信息即可,如下配置方法:
配置 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 包导入
- 读取电子签名信息示例
目录
Java 读取 PDF 信息文本,获取电子签章信息
- 依赖配置
- 收费版
- 免费版
- Jar 包导入
- 读取电子签名信息示例