在 Java 中,填充 Word 模板数据有多种实现方式。以下是一些常见的方法,以及它们的步骤流程、依赖坐标和示例代码:
Apache POI 是一个流行的 Java 库,用于操作 Microsoft Office 文件格式(包括 Word 文档)。它可以用于填充 Word 模板数据。
步骤流程:
Maven 依赖:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.0.0</version>
</dependency>
Gradle 依赖:
implementation 'org.apache.poi:poi:5.0.0'
示例代码:
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class WordTemplateFiller {
public static void main(String[] args) throws IOException {
// Load the Word template
XWPFDocument document = new XWPFDocument(Thread.currentThread().getContextClassLoader().getResourceAsStream("template.docx"));
// Find the placeholder and replace with actual data
for (XWPFParagraph paragraph : document.getParagraphs()) {
for (XWPFRun run : paragraph.getRuns()) {
String text = run.getText(0);
if (text != null && text.contains("{{name}}")) {
text = text.replace("{{name}}", "John Doe");
run.setText(text, 0);
}
}
}
// Save the modified document
FileOutputStream out = new FileOutputStream(new File("filled_template.docx"));
document.write(out);
out.close();
document.close();
}
}
在上面的示例中,"template.docx"是你的 Word 模板文件,里面包含了"{{name}}"占位符,代码会将其替换为"John Doe"。
Apache FreeMarker 是一个模板引擎,可以用于填充 Word 模板数据。
步骤流程:
Maven 依赖:
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.31</version>
</dependency>
Gradle 依赖:
implementation 'org.freemarker:freemarker:2.3.31'
示例代码:
import freemarker.template.Configuration;
import freemarker.template.Template;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
public class FreeMarkerWordTemplateFiller {
public static void main(String[] args) throws Exception {
// Load FreeMarker template configuration
Configuration cfg = new Configuration(Configuration.VERSION_2_3_31);
cfg.setClassForTemplateLoading(FreeMarkerWordTemplateFiller.class, "/templates");
// Load FreeMarker template
Template template = cfg.getTemplate("template.ftl");
// Prepare data model
Map<String, String> dataModel = new HashMap<>();
dataModel.put("name", "Jane Doe");
// Merge template with data model
StringWriter writer = new StringWriter();
template.process(dataModel, writer);
// Write merged content to Word document using Apache POI
XWPFDocument document = new XWPFDocument();
XWPFParagraph paragraph = document.createParagraph();
XWPFRun run = paragraph.createRun();
run.setText(writer.toString());
FileOutputStream out = new FileOutputStream(new File("filled_template.docx"));
document.write(out);
// Clean up resources
out.close();
document.close();
}
}
在上面的示例中,"template.ftl"是 FreeMarker 模板文件,代码将模板与数据合并后,使用 Apache POI 将生成的文本写入 Word 文档。
这些是两种常见的方法,用于在 Java 中填充 Word 模板数据。选择适合你项目需求的方法,并根据示例代码进行定制。