Adobe Acrobat pro生成PDF模版
2018-06-18 03:50:07来源:未知 阅读 ()
最近做了一个关于动态生成PDF合同的需求 java生成PDF 网络上随便一搜遍有了
不要用手动在代码里面输入合同中的文字这种方式 如这样的方式 http://blog.csdn.net/justinytsoft/article/details/53320225
需求的多变,那天需要修改一下字体的颜色,或者字体, 增加一行字,等等其他奇葩要求,上面这个博客的方式都得修改代码
使用itext使用pdf模版的方式,就不需要修改代码了.
这里用的是itext生成PDF
maven依赖
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.6</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
参考以下博客 ,但是该中还是有一些问题,PDF模版
http://blog.csdn.net/top__one/article/details/65442390
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
以下都是踩过的坑,希望能帮助后来的人
原始pdf
word模版转PDF后 导入Adobe Acrobat pro 如果pdf中 甲方:_______ 姓名:_____ 之类的下划线,,他会自动生成表单
导入之后
上图中的黑框 就是表单了 双击
重点关注表单中的名称 这个就是以后再代码分钟动态填充的
坑来了
这里可以看到表单的字体和大小
实际上自动生成的表单, 我们在往里面填充内容的时候会有问题的.
小塚明朝Pr6N字体(Kozuka Mincho Pr6N R)
填充汉字的时候有些汉字会显示不出来 比如 军 ,资 ,肯定还有很多字不能显示出来
第一感觉就是更换字体 然后换成微软雅黑
好吧,.现在汉字都显示不出来了,只显示数字
试了很多字体.都不行
最后,删除了自动生成的表单.手动玩需要动态添加内容的地方添加表单
实际测试 这种方法可行
itext 代码案例
//PdfTemplate类里面定义了所有表单域的名称 这里只举例子了两个表单域//上面提到了表单域的名称 public static void fillTemplate(PdfTemplate pdfTemplate) throws BusinessException{ // 模板路径 String templatePath = "/pdf/xxxx.pdf"; // 填充模版文件后生成的待签署的合同路径 //TODO 地址 // 文件名BORROWPROTOCOL+协议编号 String newPDFPath = TEMP_PDF_LOCATION+pdfTemplate.getContract_no()+EXPANDEDNAME; PdfReader reader; FileOutputStream out; ByteArrayOutputStream bos; PdfStamper stamper; try { out = new FileOutputStream(newPDFPath); // 读取pdf模板 reader = new PdfReader(templatePath); bos = new ByteArrayOutputStream(); stamper = new PdfStamper(reader, bos); AcroFields form = stamper.getAcroFields(); //往pdf合同模版里面设置值 //mock //合同编号 form.setField("contract_no", pdfTemplate.getContract_no()); //甲方 form.setField("first_user_name", pdfTemplate.getFirst_user_name()); //...需要填充的其他表单域 // 如果为false那么生成的PDF文件还能编辑,一定要设为true stamper.setFormFlattening(true); stamper.close(); Document doc = new Document(); PdfCopy copy = new PdfCopy(doc, out); doc.open(); //pdf模版的页数 int pagecount= reader.getNumberOfPages(); for(int i=1 ;i<pagecount+1;i++){ PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), i); copy.addPage(importPage); } doc.close(); } catch (IOException e) { throw new BusinessException("生成合同模版失败,合同编号:"+pdfTemplate.getContract_no()); } catch (DocumentException e) { throw new BusinessException("生成合同模版失败,合同编号:"+pdfTemplate.getContract_no()); } }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:java_多线程4种实现方式
下一篇:java中级异常篇
- maven配置总结 2020-06-01
- Spring boot Sample 003之spring-boot-configuration-proper 2020-06-01
- 高吞吐量的分布式发布订阅消息系统Kafka之Producer源码分析 2020-05-30
- JAVA设计模式之原型模式(prototype) 2020-05-23
- Eclipse下导入web项目(Some projects cannot be imported b 2020-05-20
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash