Java替换word模板内容

journey

[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);
}
``