java如何生成word文档
使用Apache POI库生成Word文档
Apache POI是Apache软件基金会的开源库,支持读写Microsoft Office格式文件。通过XWPF组件可以操作.docx格式的Word文档。
添加Maven依赖:
<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 createSimpleDocument() throws Exception {
XWPFDocument document = new XWPFDocument();
// 添加标题
XWPFParagraph title = document.createParagraph();
title.setAlignment(ParagraphAlignment.CENTER);
XWPFRun titleRun = title.createRun();
titleRun.setText("文档标题");
titleRun.setBold(true);
titleRun.setFontSize(20);
// 添加正文
XWPFParagraph para = document.createParagraph();
para.setAlignment(ParagraphAlignment.LEFT);
XWPFRun run = para.createRun();
run.setText("这是一段正文内容。");
// 保存文件
FileOutputStream out = new FileOutputStream("output.docx");
document.write(out);
out.close();
document.close();
}
}
使用docx4j库生成Word文档
docx4j是另一个处理Office Open XML文件的Java库,更适合复杂文档操作。
Maven依赖:
<dependency>
<groupId>org.docx4j</groupId>
<artifactId>docx4j</artifactId>
<version>11.4.5</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 wordPackage = WordprocessingMLPackage.createPackage();
MainDocumentPart documentPart = wordPackage.getMainDocumentPart();
documentPart.addParagraphOfText("标题").setStyle("Heading1");
documentPart.addParagraphOfText("正文内容");
wordPackage.save(new File("output.docx"));
}
}
使用模板引擎生成Word文档
对于需要复杂格式或大量动态内容的文档,建议使用模板引擎:
FreeMarker模板方案:
- 创建.docx模板文件
- 将模板另存为XML格式
- 使用FreeMarker处理XML模板
- 将处理后的XML转换回.docx
Velocity模板方案:
// 类似FreeMarker的处理流程
// 需要先将.docx转换为XML模板
商业库Aspose.Words
Aspose.Words是功能强大的商业库,提供最完整的Word文档操作API。
示例代码:
import com.aspose.words.*;
public class AsposeExample {
public static void main(String[] args) throws Exception {
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER);
builder.getFont().setSize(18);
builder.getFont().setBold(true);
builder.writeln("文档标题");
builder.getParagraphFormat().setAlignment(ParagraphAlignment.LEFT);
builder.getFont().setSize(12);
builder.getFont().setBold(false);
builder.writeln("正文内容");
doc.save("output.docx");
}
}
生成表格和列表
使用Apache POI添加表格示例:
XWPFTable table = document.createTable(3, 2); // 3行2列
table.getRow(0).getCell(0).setText("Header1");
table.getRow(0).getCell(1).setText("Header2");
table.getRow(1).getCell(0).setText("Data1");
table.getRow(1).getCell(1).setText("Data2");
添加编号列表:
XWPFNumbering numbering = document.createNumbering();
BigInteger numId = numbering.addNum(BigInteger.valueOf(1));
XWPFParagraph listItem = document.createParagraph();
listItem.setNumID(numId);
listItem.createRun().setText("第一项");
插入图片
Apache POI插入图片示例:
byte[] imageData = Files.readAllBytes(Paths.get("image.jpg"));
XWPFRun imageRun = para.createRun();
imageRun.addPicture(
new ByteArrayInputStream(imageData),
Document.PICTURE_TYPE_JPEG,
"image.jpg",
Units.toEMU(200), // 宽度
Units.toEMU(150) // 高度
);
设置页眉页脚
添加页眉示例:
XWPFHeader header = document.createHeader(HeaderFooterType.DEFAULT);
XWPFParagraph headerPara = header.createParagraph();
headerPara.setAlignment(ParagraphAlignment.RIGHT);
headerPara.createRun().setText("公司机密");
文档样式设置
设置段落样式:
CTPPr ppr = paragraph.getCTP().addNewPPr();
CTTextAlignment align = ppr.addNewTextAlignment();
align.setVal(STTextAlignment.CENTER);
设置字体样式:
run.setFontFamily("宋体");
run.setColor("FF0000");
run.setUnderline(UnderlinePatterns.SINGLE);






