当前位置:首页 > 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模板方案:

java如何生成word文档

  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添加表格示例:

java如何生成word文档

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
分享给朋友:

相关文章

vue实现文档分享

vue实现文档分享

Vue 实现文档分享功能 使用 Vue 和第三方库实现文档上传与分享 在 Vue 中实现文档分享功能,通常需要结合文件上传、存储和分享链接生成等步骤。以下是一个常见的实现方案: 安装必要的依赖库:…

java如何配置环境变量

java如何配置环境变量

配置Java环境变量的方法 下载并安装JDK 从Oracle官网或OpenJDK下载适合操作系统的JDK安装包。运行安装程序并按照提示完成安装,记下JDK的安装路径(例如C:\Program File…

如何运行java项目

如何运行java项目

运行Java项目的步骤 确保Java环境已安装 在运行Java项目前,需确认系统已安装Java Development Kit(JDK)。通过命令行输入java -version和javac -ver…

jquery 文档

jquery 文档

以下是关于 jQuery 文档的核心内容和资源整理,便于快速查阅和使用: jQuery 官方文档 官网地址:jQuery Official Documentation包含完整的 API 参考,涵盖选…

vue实现文档编辑

vue实现文档编辑

Vue 实现文档编辑的方法 使用富文本编辑器组件 集成第三方富文本编辑器如 Quill、TinyMCE 或 CKEditor,通过 Vue 组件化实现。以 Quill 为例: 安装依赖: npm…

vue实现word文档预览

vue实现word文档预览

使用 docx-preview 库实现预览 docx-preview 是一个专门用于在浏览器中预览 Word 文档的 JavaScript 库。它支持 .docx 格式的文件,可以直接在 Vue 项目…