`
roc08
  • 浏览: 229429 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

itext解析pdf中签章文件的证书

阅读更多
itext可以生成pdf并对其进行各种操作,其中就包括签章,并且用其他工具签的章,itext也可以识别出来。

目前系统中有一个需求,系统要求上传的pdf必须进行签章,上传后需要对pdf进行验签和拿到pdf章的证书的所有者,

拿到章证书的所有者代码如下

	PdfReader reader = new PdfReader(pdfPath);
		AcroFields acroFields = reader.getAcroFields();
		if (acroFields == null) {
			return result;
		}
//签章名称
		List<String> signatureNames = acroFields.getSignatureNames();
		if (signatureNames == null || signatureNames.size() == 0) {
			return result;
		}
		reader.close();
		for (String str : signatureNames) {
//签章对应的字典
			PdfDictionary sigDict = acroFields.getSignatureDictionary(str);
			if (sigDict == null) {
				continue;
			}
			PdfName sub = sigDict.getAsName(PdfName.SUBFILTER);
			if (PdfName.ADBE_X509_RSA_SHA1.equals(sub)) {
//签章对应的证书
				PdfString certStr = sigDict.getAsString(PdfName.CERT);
				if (certStr == null) {
					certStr = sigDict.getAsArray(PdfName.CERT).getAsString(0);
				}
				if (certStr == null) {
					continue;
				}
//签章对应的证书
				X509CertParser certParser = new X509CertParser();
				certParser.engineInit(new ByteArrayInputStream(certStr.getBytes()));
				Collection<Certificate> certs = certParser.engineReadAll();
				if (certs == null || certs.size() == 0) {
					continue;
				}
				X509Certificate certificate = (X509Certificate) certs.iterator().next();
				if (certificate == null) {
					continue;
				}
				X500Principal principal = certificate.getSubjectX500Principal();
				if (principal == null) {
					continue;
				}
//签章对应的证书的所有者
				LdapName ldapDN = new LdapName(principal.getName());
				for (Rdn rdn : ldapDN.getRdns()) {
					if ("CN".equals(rdn.getType())) {
						result.add((String) rdn.getValue());
					}
				}
			}
		}
分享到:
评论

相关推荐

    java pdf 实现电子签章下载

    与iTextPDF相比,PDFBox更注重读取和解析PDF文档,但在电子签章方面也提供了支持。 2. 添加依赖:如果你选择使用PDFBox,也需要在项目中引入相应的依赖: ```xml &lt;groupId&gt;org.apache.pdfbox &lt;artifactId&gt;pdfbox...

    java实现pdf文件的电子签字+盖章+防伪二维码+水印+PDF文件加密

    在Java中,iText库提供了SignPDF方法,可以结合Java Cryptography Extension (JCE) 和Certificate Authority (CA) 的数字证书来实现这一功能。首先,你需要获取用户的私钥和公钥证书,然后使用iText的PdfStamper类将...

    java 生成pdf 签章

    Java中,iText库提供了丰富的API来处理PDF签章。以下是使用iText签章的基本流程: 1. 加载PDF文档。 2. 创建一个PdfStamper对象,它允许我们在现有PDF上添加注释、签名等。 3. 获取一个AcroFields对象,用于处理...

    java实现将html转pdf,并在指定位置添加印章

    iText提供了`Image`类,你可以通过文件路径或者流加载印章图片,然后使用`setAbsolutePosition(x, y)`方法设定其在PDF中的位置。 下面是一个简单的示例代码片段,展示如何使用Flying Saucer和iText完成这个任务: ...

    Java中使用 FreeMarker 生成pdf盖章合同文件

    Java中使用FreeMarker生成PDF合同文件的过程主要包括配置FreeMarker环境、创建数据模型、解析模板、生成PDF以及添加图片盖章。通过结合FreeMarker的灵活性和Flying Saucer的转换能力,我们可以方便地将动态生成的...

    Java 在PDF中添加骑缝章示例解析

    Java 在 PDF 中添加骑缝章示例解析 在 Java 中添加骑缝章是非常重要的功能,特别是在一些需要确保合同真实、有效的业务场景中。骑缝章是一种防范风险的重要方式,可以确保合同的真实性和有效性。在本文中,我们将...

    标签替换,盖章

    3. **Java PDF处理**:对于PDF文档,Java有如Apache PDFBox或iText等库,可以实现对PDF文档的读写和电子签章操作。这些库提供了API接口,允许开发者插入、验证和删除电子签章。 4. **XML Signatures**:在处理XML...

Global site tag (gtag.js) - Google Analytics