try {
PdfReader reader = null;
reader = new PdfReader(domainDoc.getDoc());
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
com.itextpdf.text.Document document = new com.itextpdf.text.Document();
PdfCopy copy = new PdfCopy(document, byteOut);
document.open();
int pageNum = reader.getNumberOfPages();
pageNum = pageNum - getSignPages(reader);// check sign pages
for (int page = 0; page < pageNum;) {
copy.addPage(copy.getImportedPage(reader, ++page));
}
Rectangle pageRectangle = reader.getPageSize(pageNum);
ByteArrayInputStream signStream =
new ByteArrayInputStream(signatureTemplete2PDF(pageRectangle, domainDoc, activities));
PdfReader signTempleteReader = new PdfReader(signStream);
int signPageSize = signTempleteReader.getNumberOfPages();
for (int page = 0; page < signPageSize;) {
copy.addPage(copy.getImportedPage(signTempleteReader, ++page));
}
document.close();
// eSign PDF document
ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
PdfReader encryptReader = new PdfReader(byteIn);
ByteArrayOutputStream encryptByteOut = new ByteArrayOutputStream();
//
String jksPath = Environments.getClassPath(properties.getProperty("store.path"));
String keyStorePass = properties.getProperty("store.password");
String keyPass = properties.getProperty("key.password");
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(new FileInputStream(jksPath), keyStorePass.toCharArray());
// 获取私钥
String alias = (String) ks.aliases().nextElement();
PrivateKey key = (PrivateKey) ks.getKey(alias, keyPass.toCharArray());
Certificate[] chain = ks.getCertificateChain(alias);
PdfStamper stamper = PdfStamper.createSignature(encryptReader, encryptByteOut, '\0');
// 进行数字签名
PdfSignatureAppearance appearance = stamper.getSignatureAppearance();
appearance.setCrypto(key, chain, null, PdfSignatureAppearance.WINCER_SIGNED);
appearance.setCertificationLevel(PdfSignatureAppearance.CERTIFIED_NO_CHANGES_ALLOWED);
appearance.setReason("BGL.Digital Signature ");
appearance.setLocation("AU");
stamper.getWriter().setCompressionLevel(5);
// 使用私钥对文档进行加密,并且只允许打印选项
stamper.setEncryption(null, Utils.md5(keyStorePass).getBytes(), PdfWriter.ALLOW_PRINTING,
PdfWriter.ENCRYPTION_AES_256);
// log.info("status:"+domainDoc.getStatus());
// add watermark when signing has been completed by all required signatories.
if (domainDoc.getStatus().equals(DocumentStatus.SIGNED)) {
// 添加水印
addWatermark(stamper, pageRectangle, pageNum, "Digitally Signed on "
+ Utils.formatDate(new Date()));
}
// add signature metadata
//HashMap<String, String> info = reader.getInfo();
// stamper.setMoreInfo(info);
stamper.close();
InputStream is = new ByteArrayInputStream(encryptByteOut.toByteArray());
return is;
} catch (DocumentException e) {
log.error(e, e);
throw new ElectronicSignaturesException(e);
} catch (IOException e) {
log.error(e, e);
throw new ElectronicSignaturesException(e);
} catch (Exception e) {
log.error(e, e);
throw new ElectronicSignaturesException(e);
}
主要的jar版本为
com.itextpdf:itextpdf:jar:5.1.1
org.bouncycastle:bcmail-jdk15:jar:1.46
org.bouncycastle:bcprov-jdk15:jar:1.46
分享到:
相关推荐
此外,iTextPDF还提供了数字签名、加密和表单处理等功能,以满足各种PDF处理需求。 这两个JAR包结合使用,可以为处理含有亚洲语言的PDF文档提供全面的支持。例如,你可以创建一个包含汉字的PDF报告,或者从一个已经...
6. **数字签名**:iText支持PDF文档的数字签名,确保文档的安全性和完整性。 7. **水印和页眉页脚**:你可以为PDF添加水印、页眉和页脚,增加文档的视觉效果和版权保护。 8. **PDF/A兼容性**:对于长期存储和归档...
5. **安全性**:提供数字签名和加密功能,保护PDF文档不被篡改。 6. **事件处理**:通过监听器机制,可以在PDF文档的不同阶段执行自定义操作,如页眉页脚的动态生成。 7. **PDF/A兼容**:支持创建符合PDF/A标准的...
iText库支持对PDF文档进行40位和128位的RC4加密,以及AES-128加密。通过使用iText,开发者可以设置用户权限,限制如打印、复制文本、编辑文档等操作。这确保了PDF文件的内容不被未经授权的人员滥用。 接下来是PDF...
2. **ITEXT库**:ITEXT是Java中广泛使用的PDF处理库,能够进行创建、编辑和签名PDF文档等操作。在数字签名方面,ITEXT提供了SignatureUtils和PdfStamper类等工具,用于创建和验证PDF的数字签名。 3. **keytool**:...
ITextPDF是一个广泛使用的Java库,用于创建、修改和处理PDF文档。这个资源包包含的是itextpdf的5.5.10版本,它提供了源代码、jar包和文档,对于开发者来说是非常宝贵的参考资料。 首先,我们来详细了解**itextpdf库...
首先,`itextpdf-5.2.0.jar`是核心库文件,包含了iText的主要功能,如创建、读取、修改PDF文档,添加文本、图像、表格、链接等元素,以及数字签名和安全性功能。将这个jar文件放入项目的`WEB-INF/lib`目录下,意味着...
2. **数字签名**:使用证书的私钥对PDF文档的哈希值进行加密,形成数字签名。这样,任何对文档的改动都会导致哈希值变化,从而签名无效。 3. **时间戳**:签章时通常会包含一个时间戳,记录签章时的日期和时间,这...
- `itextpdf-5.5.3-javadoc.jar`:包含了iText库的Java文档,是开发者理解和学习库函数的重要参考资料。 - `itextpdf-5.5.3-sources.jar`:源码包,允许开发者查看和研究库的内部实现,有助于深入学习和调试。 - ...
此外,还可以创建和处理PDF表单,提取和修改文档元数据,甚至进行数字签名和安全加密。 6. 开源许可证:iText遵循AGPL(GNU Affero General Public License)许可证,这意味着任何使用iText的项目,如果涉及到...
此外,iTextPDF还提供了许多高级功能,如PDF/A合规性、PDF/UA无障碍访问、PDF加密等,可以根据具体需求进行深入探索和应用。 总的来说,iTextPDF与itextasian结合使用,为Java开发者提供了一套完整的工具集,用于...
iText是一款广泛使用的开源Java库,专门用于生成和编辑PDF文档。这个中文帮助文档提供了详细的指导,帮助开发者理解和使用iText来创建包含丰富内容的PDF文件。以下是对iText库和文档中涉及的关键知识点的详细解释: ...
iTextPDF不仅支持创建新的PDF文档,还能在现有文档上进行编辑,如添加文本、图像、表格、链接等,以及签署PDF和执行数字签名。 文档内容可能包括以下几个关键知识点: 1. **安装与引入**:首先,介绍如何将iText...
本资料包"iText PDF加密签名.zip"主要关注的是如何使用iText库对PDF文档进行加密和签名,以确保文档的完整性和不可篡改性。 PDF加密是保护PDF文档免受未经授权访问的一种方法。iText支持40位和128位RC4加密以及AES...
例如,可以使用iText创建新的PDF文档,添加文本、图像、表格、链接等元素,进行布局管理,处理PDF表单,以及进行PDF文档的安全性和数字签名操作。版本5.0.5是iText的一个稳定版本,提供了许多改进和新特性,使得开发...
其次,iText 5.3.2还支持对已有PDF文档进行修改和编辑。你可以添加、删除或更新页面内容,甚至可以处理PDF表单。例如,使用`PdfStamper`类可以在现有PDF上添加水印、签名或者其他元数据。此外,iText的`AcroFields`...
5. **数字签名**:iText支持为PDF文档添加数字签名,确保文档的完整性和来源的可靠性。 6. **PDF/A兼容性**:对于长期保存和归档的需求,iText可以创建符合PDF/A标准的文档,这是一种确保PDF文件长期可读性的国际...
6. **数字签名**:能为PDF文档添加数字签名,验证文档的完整性和来源。 7. **加密与权限控制**:可以设置PDF文档的访问权限,保护文档内容不被非法复制或编辑。 在5.4.3版本中,提供的资源包括多个JAR文件: - **...
5. **数字签名**:iText支持对PDF文档进行数字签名,以确保其完整性和不可篡改性。 6. **PDF/A兼容性**:iText可以创建符合PDF/A标准的文档,这种标准用于长期保存电子文档,保证其在未来仍可阅读。 7. **XML到PDF...
5. **数字签名**:为了确保文档的安全性和完整性,iText支持添加数字签名,验证文档未被篡改。 6. **事件处理**:通过实现特定的接口,开发者可以自定义PDF生成过程中的某些行为,比如页面插入、对象创建等。 7. *...