Java 填充 PDF 模版

制作 PDF 模版

  • 安装 OnlyOffice
    从 OnlyOffice 官网下载 OnlyOffice Desktop,安装过程很简单,一路下一步即可。
  • 用 OnlyOffice 制作 PDF 模版(表单)
    使用 OnlyOffice 表单设计器,制作表单,如下图
    在这里插入图片描述
    注意命名各个输入框的 formKey,后面 Java 代码需要依据这个 formKey 去填写表单
    在这里插入图片描述

使用 Java 填写 PDF 模版

  • 添加 maven 依赖,主要使用到的是 itextpdf
		<dependency>
		    <groupId>com.itextpdf</groupId>
		    <artifactId>itext7-core</artifactId>
		    <version>9.1.0</version>
		    <type>pom</type>
		</dependency>
		<dependency>
		    <groupId>com.itextpdf</groupId>
		    <artifactId>forms</artifactId>
		    <version>9.1.0</version>
		</dependency>
  • Java 填写 PDF 表单实现的 demo
    public static void fillTemplate(String templatePath, String outputPath, Map<String, String> data) {
        try {
            PdfDocument pdfDoc = new PdfDocument(new PdfReader(templatePath), new PdfWriter(outputPath));

            // 获取 PDF 表单
            PdfAcroForm form = PdfAcroForm.getAcroForm(pdfDoc, true);

            PdfFont font = PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H");
            form.getField("userName").setValue("李元霸",font,14);
            form.getField("addr").setValue("XX路XX號",font,14);
            form.getField("tel").setValue("18*******",font,14);
            form.getField("longText").setValue("不同操作系统支持的字体名称可能不同,",font,14);
            form.flattenFields(); // 把form 域去掉,这样生成新的 pdf 就不可以编辑了
            // 保存并关闭 PDF 文档
            pdfDoc.close();

            System.out.println("PDF 表单填写完成,输出文件: " + outputPath);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

几个注意点:
(1)中文问题。如果没有设置字体,会导致中文不显示。需要确保字体文件在程序运行的机器上是存在的。

PdfFont font = PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H");

(2)如果你希望生成新的 pdf 不要有输入框,那么需要调用

form.flattenFields();

(3)itextpdf 依赖包尽量用最新版本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sleeper01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值