Java读写Word文档:全面指南
Java读写Word文档:全面指南
在Java开发中,经常需要处理Word文档,例如生成报告、导入数据或解析文档内容。本文将深入探讨两种主流的Java库:Apache POI和Docx4j,并展示如何高效地读写Word文档。
1. 环境准备
首先,需要在项目中引入依赖。以Maven为例:
<!-- Apache POI for .doc and .docx -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
<!-- Docx4j for .docx -->
<dependency>
<groupId>org.docx4j</groupId>
<artifactId>docx4j-JAXB-ReferenceImpl</artifactId>
<version>8.3.9</version>
</dependency>注意:Apache POI支持旧版.doc和新版.docx,而Docx4j专精于.docx(Open XML格式)。
2. 使用Apache POI读写Word文档
2.1 读取Word文档
import org.apache.poi.xwpf.usermodel.*;
import java.io.FileInputStream;
public class ReadDocx {
public static void main(String[] args) throws Exception {
try (FileInputStream fis = new FileInputStream("example.docx");
XWPFDocument document = new XWPFDocument(fis)) {
for (XWPFParagraph paragraph : document.getParagraphs()) {
System.out.println(paragraph.getText());
}
for (XWPFTable table : document.getTables()) {
for (XWPFTableRow row : table.getRows()) {
for (XWPFTableCell cell : row.getTableCells()) {
System.out.print(cell.getText() + "\t");
}
System.out.println();
}
}
}
}
}2.2 创建Word文档
import org.apache.poi.xwpf.usermodel.*;
import java.io.FileOutputStream;
public class CreateDocx {
public static void main(String[] args) throws Exception {
try (XWPFDocument document = new XWPFDocument();
FileOutputStream out = new FileOutputStream("created.docx")) {
// 创建段落
XWPFParagraph paragraph = document.createParagraph();
XWPFRun run = paragraph.createRun();
run.setText("Hello, World!");
run.setBold(true);
run.setFontSize(24);
// 创建表格
XWPFTable table = document.createTable(2, 3);
table.getRow(0).getCell(0).setText("A1");
table.getRow(0).getCell(1).setText("B1");
document.write(out);
}
}
}3. 使用Docx4j操作Word文档
3.1 读取Word文档
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
import java.io.File;
public class ReadDocx4j {
public static void main(String[] args) throws Exception {
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new File("example.docx"));
MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart();
String text = documentPart.getContent().toString();
System.out.println(text);
}
}3.2 创建Word文档
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.wml.ObjectFactory;
import org.docx4j.wml.P;
import org.docx4j.wml.R;
import org.docx4j.wml.Text;
import java.io.File;
public class CreateDocx4j {
public static void main(String[] args) throws Exception {
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
ObjectFactory factory = new ObjectFactory();
P paragraph = factory.createP();
R run = factory.createR();
Text text = factory.createText();
text.setValue("Hello from Docx4j!");
run.getContent().add(text);
paragraph.getContent().add(run);
wordMLPackage.getMainDocumentPart().getContent().add(paragraph);
wordMLPackage.save(new File("created_docx4j.docx"));
}
}4. 高级操作与注意事项
- 样式与格式化:POI通过
XWPFRun设置字体、颜色、加粗等;Docx4j需操作WML对象。 - 图片与嵌入对象:POI使用
XWPFRun.addPicture();Docx4j需要添加关系并创建绘图元素。 - 模板替换:Docx4j适合邮件合并,POI可配合
XWPFParagraph的getRuns()进行文本替换。 - 性能对比:POI社区活跃,支持较全;Docx4j在复杂文档结构上更强大,但学习曲线稍陡。
5. 总结
本文介绍了使用Java读写Word文档的两种主流方案。Apache POI适合快速开发和兼容性要求高的场景,而Docx4j则更适合需要精细控制文档结构和内容替换的复杂应用。根据项目需求选择合适的工具,可大幅提高开发效率。