iText-对PDF进行数字签名和文档加密

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

iText-对PDF进行数字签名和文档加密
iText-对PDF进行数字签名和文档加密
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(signT empleteReader, ++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.pa th")); 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.C ERTIFIED_NO_CHAN GES_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); // /doc/af11875560.html,("status:"+domain Doc.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 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); }。

相关文档
最新文档