利用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