最近做了一个关于动态生成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());
} }
												

Adobe Acrobat pro生成PDF模版的更多相关文章

  1. 【转】adobe acrobat pro修改pdf文字

    原文网址:http://zhidao.baidu.com/link?url=7MTeEu5IM49lNIISNQMcZLyLAwMPsRQWF5WAwQPfvkPsbbZLHSQE43MWaIxxVm ...

  2. Adobe Acrobat Pro 修改背景色

      Adobe Acrobat Pro 如何修改背景色 CreateTime--2017年8月1日10:05:58Author:Marydon 参考:百度经验 在菜单栏选择“编辑”,下拉栏中选择最后一 ...

  3. Adobe Acrobat Pro 2021 for mac安装教程,完美使用!!!

    adobe acrobat是最优秀的PDF编辑软件,有了它用户可以随时随地的进行签署.支持创建PDF.编辑PDF.导出PDF.合并文件等各种管理PDF文件的实用的功能,非常好用,可以说是PDF转换的必 ...

  4. Acrobat pro Dc 2018破解版|Adobe Acrobat pro Dc 2018中文破解版下载(附序列号/免破解)

    Acrobat pro Dc 2018破解版是由Adobe公司开发的一款PDF编辑软件,它可以以PDF格式制作和保存用户的文档,以此方便浏览和打印,或使用更高级的功能,且PDF格式的文档可如实地保留原 ...

  5. Adobe Acrobat Ⅺ Pro安装激活

    1.注意一定要断网安装,如果你有防火墙拦截亦可(注意:系统自带那防火墙不行). 2.将AcrobatPro_11_Web_WWMUI.exe解压到一个目录下,找到目录下的setup.exe安装,安装时 ...

  6. adobe acrobat pro 9破解方法

    方法一:(经常没用,不推荐) 尝试一下部分常见序列号: 网上搜 方法二: (能找到文件的,推荐) 1.到 C:\Program Files\Common Files\Adobe\Adobe PCD\c ...

  7. Adobe Acrobat Pro DC破解

    下载amtemu 点击 在AMT Emulator界面,下拉选择Adobe Acrobat DC; 然后点击右下角Install安装破解补丁. 点击Install后在弹出窗口中手动找到并选择软件安装目 ...

  8. Adobe Premiere Pro生成峰值文件假死

    一.正文 使用Adobe的Premiere Pro CC进行视频剪辑制作的时候,有的时候在右下角总会出现一个“自动生成峰值文件”的提示符,并跟随一个进度条: 大部分时候,这并不会引起什么问题.虽然我也 ...

  9. Adobe Acrobat Pro 9破解

    (转载,Window8.1/64bit系统亲测可用) 1.删除C:\Program Files\Common Files\Adobe\Adobe PCD\cache\cache.db和C:\Docum ...

随机推荐

  1. Uva 01124, POJ 3062 Celebrity jeopardy

    It's hard to construct a problem that's so easy that everyone will get it, yet still difficult enoug ...

  2. 将java项目打包为jar

    打开Eclipse,点击file,选择export 选择java,选择其中的JAR file并点击next 选择需要的到处的项目,并在下方输入将项目保存为的目录,文件名字. 如果,已经将项目打包为一个 ...

  3. presto

    presto中文站:http://prestodb-china.com/ 进入hadoop机器,进入presto所在bin目录:presto --server localhost:9090 --cat ...

  4. jar包后台启动--nohup篇

    直接java -jar TestHttps-0.0.1-SNAPSHOT.jar的话是前段启动,但是窗口关闭之类的程序也就关闭了 我们可以nohup java -jar TestHttps-0.0.1 ...

  5. 【java】ArrayList、Iterator用法

    package com.tn.collect; import java.util.ArrayList; import java.util.Iterator; class Product{ public ...

  6. Intellij IDEA 像eclipse那样给maven添加依赖

    打开pom.xml,在它里面使用快捷键:ALT+Insert  ---->点击dependency 再输入想要添加的依赖关键字,比如:输个spring   出现下图: 根据需求选择版本,完成以后 ...

  7. 为什么硬链接不能链接目录、文件inode 和目录 dentry 的区别联系

    我们对任何一个目录用ls -l 命令都可以看到其连接数至少是2,这也说明了系统中是存在硬连接的,而且命令ln -d 也可以让超级用户对目录作硬连接,这些都说明了系统限制对目录进行硬连接只是一个硬性规定 ...

  8. 第六节 etc/passwd 、etc/shadow 、 useradd 、 groupadd

    调优方法原理:禁用atime的修改来节省cpu和内存资源.命令:mount noatime disk 1.配置文件1. /etc/passwd文档结构:由":" 分隔成7个字段&q ...

  9. node基础篇二:模块、路由、全局变量课堂(持续)

    今天继续更新node基础篇,今天主要内容是模块.路由和全局变量. 模块这个概念,在很多语言中都有,现在模块开发已经成为了一种潮流,它能够帮助我们节省很多的时间,当然咱们的node自然也不能缺少,看下例 ...

  10. unity图片后期处理

    处理算法如下,在Start方法中分别调用想要的效果就行了.其中,将你需要处理的 图片 拖拽到 image参数上.注意,如果想要图片保持原来的尺寸不被压缩,需要更改图片的导入设置如下图,主要的Textu ...