当前位置:首页 > 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);

设置字体样式:

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

java如何生成word文档

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

相关文章

vue实现文档上传

vue实现文档上传

Vue 实现文档上传的方法 使用原生 HTML 表单和 Vue 处理文件上传 在 Vue 中可以通过原生 HTML 的 <input type="file"> 元素结合 Vue 的数据绑定…

如何卸载java

如何卸载java

卸载Java的步骤 Windows系统卸载方法 打开控制面板,选择“程序和功能”或“卸载程序”。在列表中找到Java相关条目(如“Java 8 Update 251”),右键选择卸载并跟随向导完成…

java如何输入数组

java如何输入数组

输入数组的方法 在Java中,可以通过多种方式输入数组,具体取决于输入源(如控制台、文件等)和数组类型(如基本类型或对象类型)。以下是几种常见的方法: 使用Scanner从控制台输入 对于基本数据…

如何编译java文件

如何编译java文件

安装JDK 确保系统已安装Java Development Kit(JDK)。可通过命令行输入 javac -version 和 java -version 验证。若未安装,需从Oracle或Open…

如何安装java环境

如何安装java环境

下载JDK安装包 访问Oracle官方网站或OpenJDK项目页面,选择适合操作系统的JDK版本(如Windows、macOS或Linux)。确保下载与系统架构匹配的版本(32位或64位)。 运行…

java如何输入字符串

java如何输入字符串

使用 Scanner 类 在 Java 中,可以通过 java.util.Scanner 类来输入字符串。以下是一个示例代码: import java.util.Scanner; public c…