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

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


http://www.kler.cn/a/597475.html

相关文章:

  • 系统架构书单推荐(一)领域驱动设计与面向对象
  • 《AI大模型趣味实战》第6集:基于大模型和RSS聚合打造个人新闻电台(桌面版)
  • DHCP详解
  • mysql如何给字段添加默认值?
  • DAgent:自动化报告生成智能体方案
  • Git push后撤销提交
  • centos7搭建postgresql12主从
  • [贪心算法]最长回文串 增减字符串匹配 分发饼干
  • S32K144入门笔记(十七):PDB的API函数解读
  • C++20 中线程管理与取消机制的深度剖析
  • C++ 面向对象程序设计 - 学习笔记(持续更新中)
  • 第十三章 : Names in Templates_《C++ Templates》notes
  • debian安装Open5GS
  • 场外个股期权是什么?场外个股期权还能做吗?
  • 论文阅读:2023 arxiv Provable Robust Watermarking for AI-Generated Text
  • SpringBoot+Spring AI Alibaba接入RAG应用实践笔记
  • 【Golang】slice切片
  • python-selenium 爬虫 由易到难
  • Java之网络编程
  • ffmpeg+ubuntu16.04编译ffmpeg库