当前位置: 首页 > news >正文

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

相关文章:

  • Python个人学习笔记(18):模块(异常处理、traceback、日志记录)
  • MAC-在使用@Async注解的方法时,分布式锁管理和释放
  • STM32原理性知识
  • 一种基于大规模语言模型LLM的数据分析洞察生成方法
  • 如何在 Node.js 中使用 .env 文件管理环境变量 ?
  • Rust嵌入式开发环境搭建指南(基于Stm32+Vscode)
  • ASP3605同步降压调节器——满足汽车电子严苛要求的电源芯片方案
  • 数学之握手问题
  • Java替换jar包中class文件
  • Matlab概率区间预测全家桶更新了,新增光伏出力区间预测,4种分布可供预测
  • 【单片机通信技术应用——学习笔记三】液晶屏显示技术,取模软件的应用
  • AI重构工程设计、施工、总承包行业:从智能优化到数字孪生的产业革命
  • 【C++】八大常见的设计模式的实现与实践指南
  • Flink 内存管理
  • 3.18练习
  • 实现图片多种处理需求的实用工具
  • 功能安全实战系列06-英飞凌Tricore系列SMU详解
  • cc1.日期和进制问题———选择题。
  • Hadoop 启动,发现 namenode、secondary namenodes,这两个没有启动,报错超时。
  • dify重磅升级:从0.15.3安全升级1.1.0新手避坑指南
  • 玉渊谭天丨“稀土管制让美国慌了”,美军工稀土储备仅够数月
  • 11-13世纪的地中海贸易
  • 美检察官向法庭提交通知,要求判处枪杀联合健康高管嫌疑人死刑
  • 上海:全面建设重复使用火箭创新高地、低成本商业卫星规模制造高地
  • 5月1日起,涉外婚姻登记将在上海市16区全面铺开
  • 长三角与粤港澳大湾区融合发展,无锡何以成为窗口?