java使用itext填充pdf模板
- 1、先去建一个Word文件,设置好想要填充的地方,留好位置,设置好下划线
- 2、将Word另存为pdf
- 3、打开电脑中的Adobe Acrobat pro DC(这个应该win10 都有,搜索一下就出来了),点击 文件→创建→创建表单
- 4、然后导入刚刚生成的pdf
- 会出来这个页面
- 双击这个阴影部分,将名称改成你要设置的名称,后面要根据这个名称来给他赋值
- 全部设置好以后就可以另存为了
- 5、前期的pdf模板准备好了,就开始上代码!
- 1、首先导入我们所需要的依赖
- 2、上代码
- 3、字体需要放在resources目录下
- 6、开始测试
- 7、看看效果
- ok,非常完美!
- 如果觉得这种pdf模板的方式不好,可以参考我的另一篇博文,可以不用设置pdf模板就直接生成pdf
- 问题总结:
1、先去建一个Word文件,设置好想要填充的地方,留好位置,设置好下划线
2、将Word另存为pdf
3、打开电脑中的Adobe Acrobat pro DC(这个应该win10 都有,搜索一下就出来了),点击 文件→创建→创建表单
4、然后导入刚刚生成的pdf
会出来这个页面
双击这个阴影部分,将名称改成你要设置的名称,后面要根据这个名称来给他赋值
全部设置好以后就可以另存为了
5、前期的pdf模板准备好了,就开始上代码!
1、首先导入我们所需要的依赖
<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13</version></dependency>
2、上代码
package com.icaremgt.admin.test;import com.itextpdf.text.Image;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.*;
import org.junit.Test;import java.io.*;
import java.util.HashMap;
import java.util.Map;public class TestPdf {@Testpublic void testPdf() {// 模板文件路径String inputFileName = "F:\\pdfWork\\1\\mytests.pdf";// 生成的文件路径String outputFileName = "F:\\pdfWork\\2\\test9.pdf";OutputStream os = null;PdfStamper ps = null;PdfReader reader = null;PdfStamper stamper = null;try {os = new FileOutputStream(new File(outputFileName));// 2 读入pdf表单reader = new PdfReader(inputFileName);// 3 根据表单生成一个新的pdfps = new PdfStamper(reader, os);// 4 获取pdf表单AcroFields form = ps.getAcroFields();// 5给表单添加中文字体BaseFont bf = BaseFont.createFont("Font/SIMYOU.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);form.addSubstitutionFont(bf);// 6查询数据================================================Map<String, Object> data = new HashMap<String, Object>();data.put("childrenName", "李四");data.put("gender", "男");data.put("year", "2021");data.put("month", "09");data.put("day", "23");data.put("userName", "张三");data.put("address", "河南省案发时发放手动阀是的");// 7遍历data 给pdf表单表格赋值for (String key : data.keySet()) {form.setField(key, data.get(key).toString());}ps.setFormFlattening(true);System.out.println("===============PDF导出成功=============");} catch (Exception e) {System.out.println("===============PDF导出失败=============");e.printStackTrace();} finally {try {ps.close();reader.close();os.close();} catch (Exception e) {e.printStackTrace();}}}}
3、字体需要放在resources目录下
BaseFont bf = BaseFont.createFont("Font/SIMYOU.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
这个SIMYOU.TTF就是字体 (字体下载地址)
6、开始测试
导出成功!
7、看看效果
ok,非常完美!
可以关注我,下一期讲java使用itext将图片放到pdf模板的指定位置
如果觉得这种pdf模板的方式不好,可以参考我的另一篇博文,可以不用设置pdf模板就直接生成pdf
java使用itext直接生成pdf,无需模板
问题总结:
@gao1123576431 这位老哥提出问题说赋值了,但是最后导出的PDF是没有值得,后来他给出了解决办法,引入itext-asian
<dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency>