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配置文件*/

com.itextpdf

itextpdf

5.5.5

com.itextpdf

itext-asian

5.2.0

org.bouncycastle

bcpkix-jdk15on

1.54

org.bouncycastle

bcprov-jdk15on

1.54

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 pdf证书代码_通过itext对PDF嵌入数字证书相关推荐

  1. python pdf处理工具_用Python处理pdf文档

    介绍 译者翻译了很多Python强大的包,其中,一以贯之的思想是:面向对象.我用下面的翻译来举一个例子,比如:从PyPDF2包中导入PdfFileReader包.PdfFileReader是此包的一个 ...

  2. PDF模版制作以及用iText生成PDF

    最近有个需求,下载PDF类型的文件,故需要实现如下功能: 1.制作PDF模版 2.使用iText下载pdf 制作pdf模版,我是下载的Adobe Acrobat Pro DC制作的,当然网上也有,但是 ...

  3. itext生成pdf间距_使用itext生成pdf

    在企业的信息系统中,报表处理一直占比较重要的作用,本文将介绍一种生成PDF报表的Java组件--iText.通过 在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超级连接显示或下载得到 ...

  4. Java解析PDF文件(PDFBOX、itext解析PDF)导出PDF中的子图片,去除PDF中的水印

    前段时间,为了解析PDF,花了不少时间去学习PDFbox和itext,这两个都是处理PDF的开源库,有java和C#的.作为一个刚开始学习这两个开源库的,感觉百度上的资源还是太少了.我做的是一个关于P ...

  5. java 取pdf 文本域_java – 使用iText从pdf文件中提取文本列

    我需要使用iText从pdf文件中提取文本. 问题是:一些pdf文件包含2列,当我提取文本时,我得到一个文本文件,其中列被合并为结果(即同一行中两列的文本) 这是代码: public class pd ...

  6. java电子日记本代码_计算法日记将规则的价值视为无需计算机的代码

    java电子日记本代码 I've been preparing a presentation for the Canadian Institute for the Administration of ...

  7. 数据表格搜索php代码_手把手教学:提取PDF各种表格文本数据(附代码)

    标星★公众号     爱你们♥ 量化投资与机器学习编辑部报道 近期原创文章: ♥ 5种机器学习算法在预测股价的应用(代码+数据) ♥ Two Sigma用新闻来预测股价走势,带你吊打Kaggle ♥  ...

  8. java三目运算符简化代码_如何使用传播运算符简化代码

    java三目运算符简化代码 by Matt Granmoe 通过Matt Granmoe 如何使用传播运算符简化代码 (How to simplify your code with the sprea ...

  9. java 测试用例核心代码_核心Java测验

    java 测试用例核心代码 Welcome to Core Java Quiz. Java is an object-oriented programming language. 欢迎来到Core J ...

  10. java局域网聊天代码_简单的局域网聊天程序(java版本的)

    局域网聊天程序,首先我已经默认你的电脑已经配置好的java开发的一些环境,所需代码有两个java的源代码,他们分别是1:Server_Test.java-------2:Socket_Test.jav ...

最新文章

  1. python-桶排序
  2. NSLocalizedString不起作用
  3. 红帽子RedHat Linux 9.0
  4. 最新idea设置默认maven
  5. NSIS V3.08 简体中文增强版
  6. VDN平台各种数据库连接设置
  7. java graphics2d 绘图_java GUI Graphics2D 绘图
  8. 编程(代码、软件)规范(适用嵌入式、单片机、上位机等)
  9. Vert.x(vertx) 事件总线(EventBus)与 远程服务调用
  10. 离职后如何优雅退群?不要自作多情说告辞,聪明人都懂这4个尺度
  11. 量子计算 19 量子算法4 (Shor Part I)
  12. 新品项目交付频繁 猿团开启APP快速开发新模式
  13. 猿团将每周免费提供一款APP成品项目作为创业扶持!
  14. 自主可控!搭载龙芯二号,飞凌嵌入式FET-2K0500-C核心板发布
  15. 招生通知+4,北京大学计算机学院+中国科学技术大学信息技术学院+吉林大学人工智能学院+深圳大学计算机学院
  16. uni_app的axios封装
  17. 3至六年级计算机知识,小学三至六年级下册的信息技术教学计划
  18. 使用U盘传数据时操作系统做了什么(源码分析)
  19. 抓取网页数据并解析Android
  20. FTP的数据连接模式

热门文章

  1. 电容有哪些用途?常见的九大作用
  2. Lenovo y50-70 黑苹果hackintosh 10.14.4 Mojave 更新后开机黑屏,引导失败,无法开机
  3. android 设内网固定ip,如何给手机设置一个固定的内网ip
  4. 禁用Google英文翻译功能
  5. Android Property
  6. html加减乘除除数不能为零,0不能做除数(数学中0为什么不能做除数)
  7. 华中邀请四届 WHU1567 Sloth's Angry
  8. Choerodon猪齿鱼实践之Webhook配置
  9. 亚马逊商品详情API接口(item_get-获得AMAZON商品详情接口),亚马逊API接口
  10. 信息安全技术国家相关标准一览表