Java实现根据模板读取PDF并替换指定内容,
Java实现根据模板读取PDF并替换指定内容,
目录
- 1. 引入依赖
- 2. 创建 PDF 模板
- 3. Java 代码实现
- 4. 代码解释
在实际开发里,经常会遇到需要根据 PDF 模板文档生成特定 PDF 的需求,比如合同、证书等。咱们可以借助 iText 库来实现读取 PDF 模板文档、替换指定内容,最后重新生成新 PDF 的功能。下面我就详细给大家讲讲具体怎么做。
1. 引入依赖
如果你用 Maven 管理项目,在 pom.xml 里添加以下依赖:
<dependencies> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.13.3</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.2.0</version> </dependency> </dependencies>
itext-asian 这个依赖是为了支持中文等亚洲文字的显示。
2. 创建 PDF 模板
首先,得有一个 PDF 模板文件 template.pdf,在模板里用特定的占位符来表示需要替换的内容。可以使用 Adobe Acrobat 等工具在 PDF 里添加文本域作为占位符,比如添加一个名为 name 的文本域来表示姓名。
3. Java 代码实现
import com.itextpdf.text.DocumentException; import com.itextpdf.text.pdf.*; import java.io.*; import java.util.HashMap; import java.util.Map; public class PdfTemplateProcessor { public static void main(String[] args) { try { // 读取 PDF 模板文件 PdfReader reader = new PdfReader("template.pdf"); // 创建一个输出流,用于保存新生成的 PDF FileOutputStream outputStream = new FileOutputStream("output.pdf"); // 创建一个 PdfStamper 对象,用于操作 PDF 内容 PdfStamper stamper = new PdfStamper(reader, outputStream); // 获取 PDF 表单 AcroFields form = stamper.getAcroFields(); // 设置支持中文 BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); form.addSubstitutionFont(baseFont); // 准备要替换的数据 Map<String, String> data = new HashMap<>(); data.put("name", "张三"); data.put("date", "2024-10-01"); // 替换表单中的占位符 for (Map.Entry<String, String> entry : data.entrySet()) { String fieldName = entry.getKey(); String fieldValue = entry.getValue(); form.setField(fieldName, fieldValue); } // 关闭表单编辑 stamper.setFormFlattening(true); // 关闭 stamper 和 reader stamper.close(); reader.close(); outputStream.close(); System.out.println("新的 PDF 文档生成成功!"); } catch (IOException | DocumentException e) { e.printStackTrace(); System.out.println("生成新的 PDF 文档失败:" + e.getMessage()); } } }
4. 代码解释
1.读取 PDF 模板文件
PdfReader reader = new PdfReader("template.pdf"); FileOutputStream outputStream = new FileOutputStream("output.pdf"); PdfStamper stamper = new PdfStamper(reader, outputStream);
通过 PdfReader 读取 template.pdf 文件,使用 FileOutputStream 创建一个输出流,用于保存新生成的 PDF 文件。PdfStamper 是 iText 里用于操作 PDF 内容的重要类,它能让我们在不改变原文件结构的情况下修改 PDF 内容。
2.获取 PDF 表单并设置中文支持
AcroFields form = stamper.getAcroFields(); BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); form.addSubstitutionFont(baseFont);
AcroFields 表示 PDF 中的表单域,通过 stamper.getAcroFields() 获取表单。为了支持中文显示,使用 BaseFont.createFont 方法创建一个支持中文的字体,并添加到表单中。
3.准备要替换的数据
Map<String, String> data = new HashMap<>(); data.put("name", "张三"); data.put("date", "2024-10-01");
创建一个 Map 对象,将占位符(表单域名称)和要替换的内容进行映射。
4.替换表单中的占位符
for (Map.Entry<String, String> entry : data.entrySet()) { String fieldName = entry.getKey(); String fieldValue = entry.getValue(); form.setField(fieldName, fieldValue); }
遍历 Map,使用 form.setField 方法将表单域中的占位符替换为实际内容。
5.关闭表单编辑并保存新 PDF
stamper.setFormFlattening(true); stamper.close(); reader.close(); outputStream.close();
stamper.setFormFlattening(true) 用于将表单域扁平化,防止表单域被再次编辑。最后关闭 stamper、reader 和输出流,保存新生成的 PDF 文件。
以上就是Java实现根据模板读取PDF并替换指定内容的详细内容,更多关于Java读取PDF的资料请关注3672js教程其它相关文章!
您可能感兴趣的文章:- java实现根据pdf模板生成文件并插入文字,选项,签名和公章
- Java利用iTextPDF库实现制作PDF表格模板并填充数据
- java根据模板导出PDF的详细实现过程
- java实现在pdf模板的指定位置插入图片
- java根据模板动态生成PDF实例
用户点评