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