From: https://blog.51cto.com/u_16213356/12447686
在现代开发中,Word 文档的自动生成和模板填充是一项非常常见的需求。尤其是在生成报表、合同、信函等场景时,通过代码自动化填充模板可以极大提高工作效率。本文将详细介绍如何使用 Java 实现 Word 模板填充。我们将通过以下步骤来完成这个任务。
流程步骤
在实现 Word 模板填充之前,我们可以将整个流程梳理成如下表格:
步骤 描述
1 准备 Word 模板
2 引入必要的 Maven 依赖
3 创建 Word 文档操作的 Java 类
4 读取模板文件
5 填充模板数据
6 保存生成的文档
7 测试与调试
现在我们将详细讲解每一步的具体操作和相应代码。
步骤详细说明
1. 准备 Word 模板
首先,我们需要提前准备一个 Word 文档模板(如 template.docx),在文档中使用占位符来表示需要填充的数据,例如 ${name}、${date} 等。
2. 引入必要的 Maven 依赖
在项目的 pom.xml 文件中添加 Apache POI 依赖,这是我们操作 Word 文档的主要库。相关代码如下:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.0.0</version> <!-- 确保使用最新版本 -->
</dependency>
1.
2.
3.
4.
5.
3. 创建 Word 文档操作的 Java 类
接下来,我们需要创建一个 Java 类,用于操作 Word 文档。这里我们命名为 WordTemplateFiller.java:
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Map;
public class WordTemplateFiller {
private String templatePath; // 模板路径
private String outputPath; // 输出路径
public WordTemplateFiller(String templatePath, String outputPath) {
this.templatePath = templatePath;
this.outputPath = outputPath;
}
}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
4. 读取模板文件
接下来,我们需要实现读取模板文件的功能。添加 loadTemplate 方法:
private XWPFDocument loadTemplate() throws IOException {
try (FileInputStream fis = new FileInputStream(templatePath)) {
return new XWPFDocument(fis); // 返回读取的文档
}
}
1.
2.
3.
4.
5.
5. 填充模板数据
我们接下来需要实现模板数据填充的逻辑。添加 fillTemplate 方法,该方法接收一个 Map<String, String> 类型的参数。
public void fillTemplate(Map<String, String> data) throws IOException {
XWPFDocument document = loadTemplate();
for (XWPFParagraph paragraph : document.getParagraphs()) {
for (String key : data.keySet()) {
String value = data.get(key);
// 使用正则表达式替换占位符
String text = paragraph.getText();
if (text.contains("${" + key + "}")) {
// 替换占位符
text = text.replace("${" + key + "}", value);
// 清除段落内容
paragraph.getRuns().clear();
// 添加新的文本
XWPFRun run = paragraph.createRun();
run.setText(text);
}
}
}
}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
6. 保存生成的文档
最后,我们需要实现一个方法将填充后的文档保存到指定路径。添加 saveDocument 方法:
private void saveDocument(XWPFDocument document) throws IOException {
try (FileOutputStream fos = new FileOutputStream(outputPath)) {
document.write(fos); // 保存文档
}
}
1.
2.
3.
4.
5.
7. 测试与调试
我们可以添加一个 main 方法来测试填充功能:
public static void main(String[] args) {
try {
WordTemplateFiller filler = new WordTemplateFiller("template.docx", "output.docx");
Map<String, String> data = Map.of("name", "John Doe", "date", "2023-10-15");
filler.fillTemplate(data);
System.out.println("文档生成成功!");
} catch (IOException e) {
e.printStackTrace();
}
}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
序列图与关系图
在此部分,我们使用 Mermaid 语法描绘序列图和ER图来展示系统的交互流程与数据关系。
序列图
XWPFDocument
WordTemplateFiller
User
XWPFDocument
WordTemplateFiller
User
填充模板请求
加载模板
返回文档
填充数据
返回填充结果
关系图
WordTemplateFiller
string
templatePath
string
outputPath
XWPFDocument
string
documentContent
User
string
name
date
date
fills
operates
结论
通过本文的讲解,我们介绍了如何使用 Java 和 Apache POI 实现 Word 模板的填充。我们从准备模板开始,逐步讲解了代码实现的每一个细节。这些知识不仅对新手有帮助,还有助于有经验的开发者进行快速开发和部署。希望大家都能在实践中熟练掌握这一技能,并能够在实际的工作中为自己的项目加分!
标签:Word,String,填充,java,文档,import,word,模板 From: https://www.cnblogs.com/joeblackzqq/p/18542693