java使用itext填充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 { @Test public 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 根据表单生成一个新的pdf ps = 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,非常完美!
如果觉得这种pdf模板的方式不好,可以参考我的另一篇博文,可以不用设置pdf模板就直接生成pdf
问题总结:
@gao1123576431 这位老哥提出问题说赋值了,但是最后导出的PDF是没有值得,后来他给出了解决办法,引入itext-asian
<dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.2.0</version> </dependency>