在Java开发中,操作Word文档是常见的业务需求,广泛应用于合同生成、报表输出、通知发布、法律文书生成、病历模板填写等场景。本文将全面介绍Java操作Word文档的主流方案,包括开源与商业库各类工具对比、使用示例、优劣分析,并提供实用的选型与实践建议。
Apache POI 是最广泛使用的开源 Office 操作库之一,提供对 .doc
与 .docx
格式的支持。
核心特点:
XWPF
操作 .docx
,HWPF
操作 .doc
;代码示例:
XWPFDocument document = new XWPFDocument();
XWPFParagraph paragraph = document.createParagraph();
XWPFRun run = paragraph.createRun();
run.setText("Hello, World!");
run.setBold(true);
try (FileOutputStream out = new FileOutputStream("example.docx")) {
document.write(out);
}
document.close();
优缺点汇总:
.doc
和 .docx
docx4j 是一个专注于 Open XML(.docx
)格式的文档处理库,内部基于 JAXB,适合精细结构化文档控制。
代码示例:
WordprocessingMLPackage wordPackage = WordprocessingMLPackage.createPackage();
wordPackage.getMainDocumentPart().addParagraphOfText("Hello World!");
wordPackage.save(new File("output.docx"));
优缺点汇总:
.doc
格式JasperReports 本质是报表工具,但通过模板 + 数据源 + 导出器,也可以生成 Word 文档。
代码示例:
JasperReport report = JasperCompileManager.compileReport("report.jrxml");
JasperPrint print = JasperFillManager.fillReport(report, params, dataSource);
JasperExportManager.exportReportToDocxFile(print, "output.docx");
适用场景: 报表、发票、合同批量生成
优缺点汇总:
通过 Java UNO 接口调用 LibreOffice 实现文档读写、格式转换(PDF、HTML等)。
代码示例:
XComponentContext context = Bootstrap.bootstrap();
XComponentLoader loader = Lo.loadOffice(context);
XComponent document = Lo.loadDocument(loader, "doc.docx");
XTextDocument textDoc = Lo.qi(XTextDocument.class, document);
textDoc.getText().insertString(textDoc.getText().createTextCursor(), "New text", false);
Lo.saveDocument(document, new File("output.docx"));
优缺点汇总:
Poi-tl 是基于 Apache POI 的模板引擎,专注于模板 + 数据填充,适合非结构化文档输出(如合同、证书等)。
代码示例:
XWPFTemplate template = XWPFTemplate.compile("template.docx")
.render(Map.of("name", "张三", "date", "2025-06-01"));
template.writeAndClose(new FileOutputStream("output.docx"));
优缺点汇总:
通过 FreeMarker 渲染 .xml
格式的 Word 模板(docx本质为zip+xml结构)。
代码示例:
Configuration cfg = new Configuration(Configuration.VERSION_2_3_31);
Template template = cfg.getTemplate("template.xml");
try (Writer out = new FileWriter("output.xml")) {
template.process(dataModel, out);
}
然后手动或程序自动打包为 .docx
。
优缺点汇总:
Aspose.Words 是功能最全、性能最强的商业库之一,支持几乎所有Word相关操作和转换。
代码示例:
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.writeln("Hello, Aspose!");
doc.save("output.docx");
核心优势:
.doc
, .docx
, .pdf
, .html
, .txt
等多格式读写缺点:
用于操作 Google Docs 云端文档,适合协同编辑场景。
代码示例:
Document doc = new Document().setTitle("Java生成");
docs.documents().create(doc).execute();
优缺点汇总:
.doc
/.docx
文件的结构化编辑方案 | 类型 | 格式支持 | 性能 | 易用性 | 模板支持 | 推荐场景 |
---|---|---|---|---|---|---|
Apache POI | 开源 | doc/docx | 中 | 中 | ❌ | 通用Word读写 |
docx4j | 开源 | docx | 中 | 中 | ❌ | 精细结构控制 |
JasperReports | 开源 | 多格式 | 高 | 低 | ✅ | 报表、合同、发票 |
LibreOffice API | 开源 | 多格式 | 低 | 低 | ❌ | 格式转换、大纲编辑 |
Poi-tl | 开源 | docx | 中 | 高 | ✅ | 合同、证书模板填充 |
JWord (FreeMarker) | 开源 | docx (xml) | 高 | 中 | ✅ | 灵活结构控制 |
Aspose.Words | 商业 | 全格式 | 高 | 高 | ✅ | 企业级、复杂排版 |
Google Docs API | 云端 | docx (云端) | 中 | 中 | ❌ | 协同文档生成 |
{{变量}}
标记方式,配合 Poi-tl 使用;XWPFEvent
)减少内存消耗;.docx
代替 .doc
格式,后者兼容性差;Java操作Word文档技术路线丰富,开发者应根据项目实际需求综合评估选型: