Java 填充 PDF 模版

发布于:2025-03-21 ⋅ 阅读:(29) ⋅ 点赞:(0)

制作 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 依赖包尽量用最新版本