Java生成Word文档的多种方法
在Java中生成Word文档有几种常见方法,以下是几种主流的实现方式:

使用Apache POI
Apache POI是Java操作Office文档最常用的库,支持生成Word文档。
Maven依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
示例代码
import org.apache.poi.xwpf.usermodel.*;
public class WordGenerator {
public static void main(String[] args) throws Exception {
// 创建新文档
XWPFDocument document = new XWPFDocument();
// 添加标题
XWPFParagraph title = document.createParagraph();
title.setAlignment(ParagraphAlignment.CENTER);
XWPFRun titleRun = title.createRun();
titleRun.setText("Java生成的Word文档");
titleRun.setBold(true);
titleRun.setFontSize(16);
// 添加段落
XWPFParagraph paragraph = document.createParagraph();
XWPFRun run = paragraph.createRun();
run.setText("这是一个使用Apache POI生成的Word文档示例。");
// 添加表格
XWPFTable table = document.createTable();
XWPFTableRow row = table.getRow(0);
row.getCell(0).setText("姓名");
row.addNewTableCell().setText("年龄");
row.addNewTableCell().setText("职业");
row = table.createRow();
row.getCell(0).setText("张三");
row.getCell(1).setText("30");
row.getCell(2).setText("工程师");
// 保存文档
try (FileOutputStream out = new FileOutputStream("output.docx")) {
document.write(out);
}
}
}
使用iText
iText主要用于PDF生成,但也支持Word文档操作。
Maven依赖
<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>
使用docx4j
docx4j专门用于处理Office Open XML格式(如.docx)。
Maven依赖
<dependency>
<groupId>org.docx4j</groupId>
<artifactId>docx4j</artifactId>
<version>11.4.4</version>
</dependency>
示例代码
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
public class Docx4jExample {
public static void main(String[] args) throws Exception {
// 创建新文档
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
// 获取主文档部分
MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart();
// 添加内容
String xml = "<w:p><w:r><w:t>Hello World!</w:t></w:r></w:p>";
documentPart.getContents().addObject(xml);
// 保存文档
wordMLPackage.save(new File("output.docx"));
}
}
使用Freemarker模板
对于复杂文档,可以使用Freemarker模板生成Word文档。

步骤
- 创建Word模板(.docx),将需要替换的内容用
${variable}标记 - 使用Freemarker引擎处理模板
示例代码
import freemarker.template.Configuration;
import freemarker.template.Template;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
public class FreemarkerWordGenerator {
public static void main(String[] args) throws Exception {
// 配置Freemarker
Configuration cfg = new Configuration(Configuration.VERSION_2_3_30);
cfg.setDirectoryForTemplateLoading(new File("templates"));
// 准备数据
Map<String, Object> data = new HashMap<>();
data.put("title", "报告标题");
data.put("content", "这是报告内容...");
// 加载模板
Template template = cfg.getTemplate("template.docx");
// 生成输出
try (Writer out = new FileWriter("output.docx")) {
template.process(data, out);
}
}
}
使用XML直接生成
对于简单需求,可以直接生成XML格式的Word文档。
示例代码
import java.io.FileOutputStream;
import java.io.IOException;
public class XmlWordGenerator {
public static void main(String[] args) throws IOException {
String xmlContent = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"
+ "<w:document xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\">"
+ "<w:body>"
+ "<w:p><w:r><w:t>Hello World!</w:t></w:r></w:p>"
+ "</w:body>"
+ "</w:document>";
try (FileOutputStream out = new FileOutputStream("output.docx")) {
out.write(xmlContent.getBytes());
}
}
}
选择建议
- 简单文档:Apache POI是最简单直接的选择
- 复杂模板:Freemarker模板更灵活
- 高性能需求:docx4j功能强大但学习曲线较陡
- PDF为主:iText可以同时处理PDF和Word
注意:生成Word文档时,请确保处理了字体、编码等国际化问题,特别是处理中文内容时。

