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,非常完美!

可以关注我,下一期讲java使用itext将图片放到pdf模板的指定位置

如果觉得这种pdf模板的方式不好,可以参考我的另一篇博文,可以不用设置pdf模板就直接生成pdf

java使用itext直接生成pdf,无需模板

itext5固定段落Paragraph,指定段落位置

itext5固定段落Paragraph,指定段落位置

问题总结:

@gao1123576431 这位老哥提出问题说赋值了,但是最后导出的PDF是没有值得,后来他给出了解决办法,引入itext-asian

<dependency>
     <groupId>com.itextpdf</groupId>
     <artifactId>itext-asian</artifactId>
     <version>5.2.0</version>
 </dependency>
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐