Java替换word模板内容
[journey] title Creating a Word Document section Setting up the Environment section Creating a Template Document section Replacing Template Content with Java
简介
在许多业务场景中,我们需要通过替换单个或多个变量来动态生成Word文档。Java提供了一种简单而强大的方式来替换Word模板中的内容,使得我们可以自动化生成包含动态数据的文档。
本文将介绍如何使用Java代码替换Word模板中的内容,以便根据需要生成各种文档,如报告、合同、简历等。
设置环境
在开始之前,我们需要确保已经安装了Java Development Kit(JDK)并配置了正确的环境变量。
另外,我们还需要添加Apache POI库的依赖,以便在Java中使用Microsoft Office的文件格式。可以通过在Maven项目中的pom.xml
文件中添加以下依赖项来实现:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
创建模板文档
在开始替换Word模板内容之前,我们首先需要创建一个模板文档。这个模板文档将包含我们要替换的占位符或变量。
可以使用Microsoft Word或其他Word处理软件来创建模板文档。在需要替换的位置插入占位符,例如${variable}
,以便稍后用Java代码替换它们。
保存模板文档并记住其文件路径,以便在代码中引用。
使用Java代码替换模板内容
接下来,我们将使用Java代码读取模板文档,并替换其中的占位符。
首先,我们需要导入所需的类和包:
import org.apache.poi.xwpf.usermodel.*;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
然后,我们可以编写一个方法来替换模板内容:
public void replaceTemplateContent(String templatePath, String outputPath, Map<String, String> variableMap) {
try {
// 读取模板文档
FileInputStream fileInputStream = new FileInputStream(templatePath);
XWPFDocument document = new XWPFDocument(fileInputStream);
// 替换模板中的内容
for (XWPFParagraph paragraph : document.getParagraphs()) {
List<XWPFRun> runs = paragraph.getRuns();
for (XWPFRun run : runs) {
String text = run.getText(0);
if (text != null) {
for (Map.Entry<String, String> entry : variableMap.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
if (text.contains(key)) {
text = text.replace(key, value);
run.setText(text, 0);
}
}
}
}
}
// 保存替换后的文档
FileOutputStream fileOutputStream = new FileOutputStream(outputPath);
document.write(fileOutputStream);
// 关闭流
fileInputStream.close();
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
代码中的replaceTemplateContent
方法接受三个参数:模板文件路径、输出文件路径和一个包含占位符和相应值的Map
。
我们首先通过FileInputStream
读取模板文档,并创建一个XWPFDocument
对象来表示文档。然后,我们遍历文档中的段落和运行,查找并替换包含占位符的文本。最后,我们使用FileOutputStream
将替换后的文档保存到指定的输出文件路径。
为了演示如何使用replaceTemplateContent
方法,我们可以编写以下代码:
public static void main(String[] args) {
String templatePath = "path/to/template.docx";
String outputPath = "path/to/output.docx";
Map<String, String> variableMap = new HashMap<>();
variableMap.put("${name}", "John Doe");
variableMap.put("${age}", "30");
variableMap.put("${occupation}", "Software Developer");
replaceTemplateContent(templatePath, outputPath, variableMap);
}
``