当前位置:首页 > Java

java如何生成word文档

2026-02-05 14:44:36Java

使用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模板方案:

  1. 创建.docx模板文件
  2. 将模板另存为XML格式
  3. 使用FreeMarker处理XML模板
  4. 将处理后的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);

设置字体样式:

java如何生成word文档

run.setFontFamily("宋体");
run.setColor("FF0000");
run.setUnderline(UnderlinePatterns.SINGLE);

标签: 文档java
分享给朋友:

相关文章

java如何创建线程

java如何创建线程

创建线程的方法 在Java中,创建线程主要有两种方式:继承Thread类和实现Runnable接口。以下是具体实现方法: 继承Thread类 通过继承Thread类并重写run()方法可以创建线程。…

java如何输入

java如何输入

使用Scanner类进行输入 Scanner类是Java中最常用的输入工具,适用于从控制台或文件读取数据。需要导入java.util.Scanner包。 基本语法: Scanner sca…

vue实现文档结构

vue实现文档结构

Vue 实现文档结构的方法 Vue 可以通过组件化和路由管理来实现清晰的文档结构。以下是一些关键方法: 组件化拆分 将文档的不同部分拆分为独立的 Vue 组件。例如: 头部导航栏 (Header…

java如何打印数组

java如何打印数组

打印数组的方法 在Java中,打印数组有多种方式,以下是几种常见的方法: 使用Arrays.toString()方法 这种方法适用于一维数组,可以快速将数组转换为字符串形式输出: int[] a…

如何精通java

如何精通java

理解Java核心概念 Java的基础知识包括数据类型、变量、运算符、控制流语句(如循环和条件判断)、数组以及面向对象编程(OOP)的核心概念(类、对象、继承、多态、封装)。熟练掌握这些内容是后续学习的…

如何学好java编程

如何学好java编程

理解基础概念 掌握Java的基础语法是学习的起点。变量、数据类型、运算符、控制结构(如循环和条件语句)是核心内容。面向对象编程(OOP)的概念(类、对象、继承、多态、封装)是Java的核心,需深入理解…