通过itext对PDF嵌入数字证书
2017-01-09 10:33
197 查看
摘要: 通过itext对PDF嵌入数字证书,支持对多数字证书的嵌入
itext从原先的1.*版本到了现在的7.*版本,发生了很大的变化,命名方式变了,API的调用方式也变了,网上很多对PDF做数字证书都是通过比较老的版本进行处理的。
###1、新老版本区别简要介绍(话说很多人不知道如何区别)
新老版本最直接的区别就是包命名方式,itext5之前的命名方式为com.lowagie.text,从itext5以后,命名方式改为com.itextpdf.text,通过这个方式最容易判断。
可以直接的看出itext的两个命名方式,咦( ′◔ ‸◔`) 老版本竟然还有那么多人在使用~~~
itext5之前的版本
itex- t5之后的版本
###2、itext对第三方构建的依赖
通过itext对pdf做数字证书时候,需要用到第三方的加解密工具包,以itext5.5.5为例,查看其用到的org.bouncycastle(著名的加密码工具)包的版本。
###3、代码样例
这个也是参考官方样例代码进行修改的~
itext从原先的1.*版本到了现在的7.*版本,发生了很大的变化,命名方式变了,API的调用方式也变了,网上很多对PDF做数字证书都是通过比较老的版本进行处理的。
###1、新老版本区别简要介绍(话说很多人不知道如何区别)
新老版本最直接的区别就是包命名方式,itext5之前的命名方式为com.lowagie.text,从itext5以后,命名方式改为com.itextpdf.text,通过这个方式最容易判断。
可以直接的看出itext的两个命名方式,咦( ′◔ ‸◔`) 老版本竟然还有那么多人在使用~~~
itext5之前的版本
itex- t5之后的版本
###2、itext对第三方构建的依赖
通过itext对pdf做数字证书时候,需要用到第三方的加解密工具包,以itext5.5.5为例,查看其用到的org.bouncycastle(著名的加密码工具)包的版本。
###3、代码样例
/*pom配置文件*/ <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.5</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.2.0</version> </dependency> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcpkix-jdk15on</artifactId> <version>1.54</version> </dependency> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.54</version> </dependency>
public static void makeSignature(String src, String dest) { BouncyCastleProvider provider = new BouncyCastleProvider(); Security.addProvider(provider); KeyStore ks = null; String alias = null; PrivateKey pk = null; Certificate[] chain = null; try { ks = KeyStore.getInstance("pkcs12"); ks.load(new FileInputStream(KEYSTORE), PASSWORD.toCharArray()); } catch (Exception e) { e.printStackTrace(); } try { alias = (String)ks.aliases().nextElement(); pk = (PrivateKey) ks.getKey(alias, PASSWORD.toCharArray()); chain = ks.getCertificateChain(alias); } catch (Exception e) { e.printStackTrace(); } try { PdfReader reader = new PdfReader(src); FileOutputStream os = new FileOutputStream(dest); PdfStamper stamper = PdfStamper.createSignature(reader, os, '\0'); //PdfStamper stamper = PdfStamper.createSignature(reader, os, '\0', null, true); //在一份PDF文档中嵌入多个数字证书请参考上面一行注释的代码 PdfSignatureAppearance appearance = stamper.getSignatureAppearance(); BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); appearance.setLayer2Font(new Font(bfChinese, 8, Font.NORMAL)); appearance.setLayer2Text("\n\n\n 浙 江 X X X X 科 技 有 限 公 司"); appearance.setReason("签名防伪"); appearance.setLocation("浙江杭州"); //添加位置信息,可为空 appearance.setContact("service@yunhetong.net"); appearance.setVisibleSignature(new Rectangle(380, 755, 512, 812), reader.getNumberOfPages(), "sig"); ExternalDigest digest = new BouncyCastleDigest(); ExternalSignature signature = new PrivateKeySignature(pk, DigestAlgorithms.SHA256, provider.getName()); MakeSignature.signDetached(appearance, digest, signature, chain, null, null, null, 0, MakeSignature.CryptoStandard.CMS); } catch (Exception e) { e.printStackTrace(); } }
这个也是参考官方样例代码进行修改的~
相关文章推荐
- java 通过IText生成PDF时顺序问题(图片)
- java通过xml配置属性用iText包生成pdf文件
- itext 实现pdf打印数字上标和下标
- 【HTML 元素】嵌入另一张HTML文档、通过插件嵌入内容、嵌入数字表现形式
- 通过iText合并pdf
- 安卓通过itext创建包含中文的pdf出错
- PHP通过OpenSSL生成证书、密钥并且加密解密数据,以及公钥,私钥和数字签名的理解
- itextpdf通过for导出多个pdf出现com.itextpdf.kernel.PdfException: pdf.inderect.object.belong.to.other.pdf.docu
- java通过ssl连接LDAP服务器(包括LDAP服务器搭建、openssl数字证书生成、openldap服务器配置启动)
- 通过jxl和itext 将excel转化成pdf
- 通过iText生成PDF
- java生成数字证书方法(通过keytool)
- itext通过pdf模板填充数据并调用打印机打印
- android EditText里面嵌入两个按钮,通过按钮可以加减EditText里的数字,组合自定义控件。
- iText7通过模板生成PDF
- 通过JAVA来读取数字证书
- 【转】Java通过IText导出word和pdf
- 破解打开证书加密的PDF文档-数字证书(电子书私钥)下载和导入教程
- 通过WEB安装数字证书
- 通过数字证书强化网络游戏的安全分析