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());
}
}
}
}
分享到:
相关推荐
本文将详细探讨如何使用iText库生成PDF并利用证书进行签章,确保文档的完整性和不可篡改性。 首先,iText是一个强大的开源Java库,专门用于创建、修改和处理PDF文档。它提供了一系列API,使得开发者可以方便地实现...
在这个“java使用iText解析pdf并生成文本文件—eclipse工程”中,我们将探讨如何利用iText库在Java环境中,特别是在Eclipse集成开发环境中,解析PDF文档并将其内容导出为文本文件。 首先,我们需要理解PDF...
在本文中,我们将深入探讨使用iText库实现国密PDF电子签章的关键技术和步骤。 首先,了解iText。iText是一个开源的Java库,也提供了.NET版本,用于创建、修改和处理PDF文档。它广泛应用于PDF文档的生成、编辑和签名...
### IText解析PDF文件 #### 一、PDF与iText简介 在《iText in Action》第二版书中,作者Bruno Lowagie介绍了如何利用iText这一强大的Java库来创建和操作PDF文档。本书覆盖了iText 5版本,并通过众多实例深入浅出地...
通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。如果PDF是标记的且包含一个结构树,就可以借助于iText将PDF文档转换成XML文档(这往往取决于PDF文档是如何创建的)。另外还可以从页面...
在iTextPDF中,可以创建一个`PdfSignatureAppearance`对象,然后使用`setCrypto`方法设置所需的证书和私钥。签章的外观可以通过设置`setRectangle`参数来调整,这决定了签章在页面上的位置和大小。同时,可以使用`...
这里我们将深入探讨如何使用iTextPDF库在Java环境中实现PDF签章的功能。 iTextPDF是一个强大的开源Java库,专门用于创建、编辑和操作PDF文档。在5.5.0版本中,iTextPDF提供了丰富的API,支持包括签章在内的各种高级...
总结来说,使用iText在PDF中处理中文字符,关键在于正确注册和使用中文字体文件。通过上述步骤,你不仅可以创建包含中文的PDF文档,还能定制字体大小和风格,满足多样化的展示需求。在实际开发中,根据项目需求,你...
本主题涉及的是如何使用Java和iTextPDF库来将一个大PDF文件拆分成多个指定大小的文件。首先,我们需要理解PDF文件的结构以及iTextPDF库的基本操作。 iTextPDF是一个强大的Java库,它提供了丰富的API来创建、修改和...
这个文件很可能是用来解析PDF中的Optional Content Groups信息的。在Itext中,我们需要遍历PDF的结构,找到OCGs,并读取它们的属性,如名称、可见性状态等。`OCGParser`可能包含解析PDF元数据,识别OCGs并存储在适当...
<artifactId>itextpdf <version>5.5.13 ``` 接下来,我们将探讨如何生成PDF文件。以下是一个简单的例子,展示如何创建一个包含简单文本的PDF文档: ```java import com.itextpdf.text.Document; import ...
iText生成pdf解决中文不显示字库,pdf凉字不显示,由于生成iText插件生成pdf的时候中文会显示不出来,遇到过的是"凉"字,查到是字体库的原因,网上下载字体库msyh.ttc,生成的时候指定字体库,就可以解决了,小bug一...
"支持中文.txt"可能是包含有关如何在iTextpdf中处理中文字符的说明或示例代码的文本文件。通常,处理非ASCII字符集,如中文,可能需要额外的设置或配置,例如使用正确的字体和编码。在iTextpdf中,可能需要指定支持...
11. **事件处理**:讨论iTextPDF中的事件模型,允许开发者在特定PDF生成阶段进行自定义处理。 12. **性能优化**:提供有关如何提高处理大量PDF文档时的性能的建议,例如使用内存管理策略和流式写入。 13. **PDF/A...
通过学习和理解iText的基本API,开发者可以创建丰富的PDF文档,并从现有PDF中提取所需的信息。不过,考虑到Android的内存限制和性能,使用iText时要注意优化资源管理和处理时间,以确保良好的用户体验。
- 确保每个书签都有一个对应的目标位置,否则在PDF中点击书签可能无法正确跳转。 - 避免内存泄漏,尤其是在处理大量书签时,要及时释放资源。 - 书签层次不宜过深,以免影响用户体验。 - 考虑兼容性和版本问题,确保...
- 图像转换:将PDF转换为图像,实际上是将PDF的每一页解析并渲染成一个图像文件。这通常涉及到色彩空间的转换、分辨率设置、图像质量控制等技术。 3. iText 7中的PDF到图像转换: - iText 7提供`PdfRenderer`类,...
iText是一个能够快速产生PDF文件的java类库。iText的java类对于那些要产生包含文本,表格,图形的只读文档是很有用的。它的类库尤其与javaServlet有很好的给合。使用iText与PDF能够使你正确的控制Servlet的输出。
2. **创建PDF文档读写对象**:使用`PdfReader`读取源PDF文件,然后用`PdfStamper`创建一个可写对象,允许我们向PDF中添加新的内容。 ```java FileInputStream fis = new FileInputStream("源文件路径"); PdfReader ...