Java使用Spire.Doc for Java实现从零生成Word文档

 更新时间:2026年05月06日 11:33:01   作者:缺点内向  
在日常的企业级开发中,报表生成、合同自动化和数据导出等场景,经常需要处理 Word 文档,本文以 Spire.Doc for Java 为例,从配置环境开始为大家详细介绍一下如何逐步实现一个包含文本、图片和表格的标准 Word 文档

在日常的企业级开发中,报表生成、合同自动化和数据导出等场景,经常需要处理 Word 文档。在 Java 生态中,除了 Apache POI 之外,也有一些商业或免费的组件可供选择,它们不依赖本地 Office 环境即可完成文档的创建与读写。

本文以 Spire.Doc for Java 为例,从配置环境开始,逐步实现一个包含文本、图片和表格的标准 Word 文档。

1. 环境准备

开始之前,请确认开发环境满足以下条件:

  • JDK 1.8 及以上版本
  • Maven 项目环境(本文以 Maven 为例,也可手动导入 Jar 包)
  • 开发工具:IDEA 或 Eclipse

2. 项目依赖配置

在项目的 pom.xml 中添加仓库和依赖。国内用户可使用镜像仓库以加快下载速度:

<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.cn/repository/maven-public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.doc</artifactId>
        <version>14.4.9</version>
    </dependency>
</dependencies>

补充说明

  • 如果不使用 Maven,可以手动下载 Jar 包并添加到项目的构建路径中。
  • 该组件的免费版存在一些限制,例如最多处理 500 个段落或 25 个表格,转换 PDF 时也有页数限制。生成超长文档时,需注意这些约束。

3. 核心对象模型

Spire.Doc for Java 的对象结构与 Word 文档的物理层级基本一致:

  • Document:对应一个完整的 Word 文档文件。
  • Section:对应文档中的“节”,用于区分不同的页面布局。
  • Paragraph:对应段落,是容纳文本的主要容器。
  • TextRange:段落中的一段连续文本,用于控制局部格式(如加粗、颜色)。

理解这四层关系后,代码的组织会相对清晰。

4. 代码实现:从零创建复杂文档

下面逐步编写一个示例,生成一份包含标题、作者信息、正文、图片和表格的工作报告。

4.1 创建文档与页面设置

首先创建 DocumentSection 对象,并调整页面边距。

import com.spire.doc.*;
import com.spire.doc.documents.*;
import com.spire.doc.fields.DocPicture;
import java.awt.*;

public class CreateWordDemo {
    public static void main(String[] args) {
        // 创建文档实例
        Document document = new Document();
        
        // 添加一个节
        Section section = document.addSection();
        
        // 设置页面边距(上下左右各 2.5 厘米)
        section.getPageSetup().getMargins().setAll(2.5);
        
        // 后续代码继续追加...
    }
}

4.2 添加标题与作者信息

标题通常需要居中且加粗,作者信息可以设置为斜体或灰色。

// 添加主标题
Paragraph titlePara = section.addParagraph();
titlePara.getFormat().setHorizontalAlignment(HorizontalAlignment.Center);
TextRange titleText = titlePara.appendText("Java 自动化办公技术报告");
titleText.getCharacterFormat().setBold(true);
titleText.getCharacterFormat().setFontName("微软雅黑");
titleText.getCharacterFormat().setFontSize(22);

// 添加作者段落
Paragraph authorPara = section.addParagraph();
authorPara.getFormat().setHorizontalAlignment(HorizontalAlignment.Center);
TextRange authorText = authorPara.appendText("作者:稀土掘金开发者 | 日期:2026-05-06");
authorText.getCharacterFormat().setItalic(true);
authorText.getCharacterFormat().setFontSize(12);
authorText.getCharacterFormat().setTextColor(Color.GRAY);

// 添加一个空行作为间距
section.addParagraph();

4.3 添加正文段落

正文需要设置首行缩进,以符合中文排版习惯。

// 添加正文段落
Paragraph contentPara = section.addParagraph();
String text = "本文演示了使用 Java 组件生成 Word 文档的基本流程。"
                + "该方法不依赖于本地安装的 Office 软件,可部署在 Linux 服务器上运行。"
                + "下面展示一个示例图片与进度表格。";
contentPara.appendText(text);
contentPara.getFormat().setFirstLineIndent(24); // 首行缩进24字符

4.4 插入图片

插入图片时,可以指定宽度和高度进行缩放。

// 插入图片段落
Paragraph imagePara = section.addParagraph();
imagePara.getFormat().setHorizontalAlignment(HorizontalAlignment.Center);

// 请将实际图片路径替换为你本地的文件
DocPicture picture = imagePara.appendPicture("C:\\temp\\sample_image.png");
picture.setWidth(300);
picture.setHeight(200);

4.5 添加表格

表格操作中,需要注意表头的样式设置,以及避免重复添加段落。下面创建一个 3 行 3 列的表格,并填充示例数据。

// 表格标题
Paragraph tableTitlePara = section.addParagraph();
tableTitlePara.appendText("项目进度清单:");
tableTitlePara.getFormat().setBold(true);

// 创建表格 (指定 3 行, 3 列)
Table table = section.addTable(true);
table.resetCells(3, 3);

// 设置表格宽度
table.setWidth(500, TableWidthType.Point);
table.getTableFormat().setCollapseBorders(true);

// ----- 设置表头(第 1 行)-----
TableRow headerRow = table.getRows().get(0);
// 清空单元格默认占用的空白段落,避免重复
for (int i = 0; i < 3; i++) {
    headerRow.getCells().get(i).getParagraphs().clear();
}

String[] headers = {"模块名称", "进度", "负责人"};
for (int i = 0; i < headers.length; i++) {
    Paragraph p = headerRow.getCells().get(i).addParagraph();
    p.appendText(headers[i]);
    p.getFormat().setHorizontalAlignment(HorizontalAlignment.Center);
    p.getItems().get(0).getCharacterFormat().setBold(true);
    headerRow.getCells().get(i).getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);
}

// ----- 第 2 行数据 -----
TableRow row2 = table.getRows().get(1);
row2.getCells().get(0).getParagraphs().clear();
row2.getCells().get(1).getParagraphs().clear();
row2.getCells().get(2).getParagraphs().clear();
row2.getCells().get(0).addParagraph().appendText("需求分析");
row2.getCells().get(1).addParagraph().appendText("已完成 100%");
row2.getCells().get(2).addParagraph().appendText("张三");

// ----- 第 3 行数据 -----
TableRow row3 = table.getRows().get(2);
row3.getCells().get(0).getParagraphs().clear();
row3.getCells().get(1).getParagraphs().clear();
row3.getCells().get(2).getParagraphs().clear();
row3.getCells().get(0).addParagraph().appendText("后端开发");
row3.getCells().get(1).addParagraph().appendText("进行中 70%");
row3.getCells().get(2).addParagraph().appendText("李四");

注意:addTable(true) 会自动为每个单元格创建一个空白段落,因此写入数据前先调用 clear() 是一个较为稳妥的做法,可以避免内容重复。

4.6 保存文档

最后将文档写入磁盘,并释放资源。

// 保存文档
String outputPath = "output/created_demo.docx";
try {
    document.saveToFile(outputPath, FileFormat.Docx);
    System.out.println("文档生成成功,路径:" + outputPath);
} catch (Exception e) {
    e.printStackTrace();
} finally {
    document.dispose();
}

5. 运行结果

执行 main 方法后,会在项目根目录的 output 文件夹中生成 created_demo.docx 文件。打开后可以看到:

  • 居中对齐的大标题和灰色的作者信息
  • 带首行缩进的正文描述
  • 按指定大小显示的图片
  • 包含表头和数据的表格

6. 补充说明

实际开发中可能遇到以下几个情况:

  • 中文字体支持:如果部署在 Linux 服务器上,需确保操作系统已安装中文字体(如宋体或微软雅黑),否则生成的文档中可能出现方框或乱码。
  • 内存占用:处理超过 20 兆的大文档时,该组件的内存占用会有所增加。建议在生成大文件后及时调用 dispose() 释放资源。
  • 版本差异:不同版本的部分方法参数可能有调整。若遇到编译错误,可参考对应版本的 API 文档进行调整。

通过上述步骤,可以在不依赖本地 Office 软件的前提下,使用 Java 完成 Word 文档的创建与内容填充。这一思路适用于报表生成、合同批量处理等自动化场景。

到此这篇关于Java使用Spire.Doc for Java实现从零生成Word文档的文章就介绍到这了,更多相关Java生成Word文档内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java设计模式之单例模式

    java设计模式之单例模式

    这篇文章主要为大家详细介绍了java设计模式之单例模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • 换了最新的idea如何将原来旧版本的idea设置导进新的idea中

    换了最新的idea如何将原来旧版本的idea设置导进新的idea中

    这篇文章主要介绍了换了最新的idea如何将原来旧版本的idea设置导进新的idea中,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • SpringBoot实现动态定时任务的示例代码

    SpringBoot实现动态定时任务的示例代码

    在SpringBoot项目中简单使用定时任务,不过由于要借助cron表达式且都提前定义好放在配置文件里,不能在项目运行中动态修改任务执行时间,实在不太灵活。现在我们就来实现可以动态修改cron表达式的定时任务,感兴趣的可以了解一下
    2022-10-10
  • Nacos配置中心同一个命名空间下配置文件引用原理分析

    Nacos配置中心同一个命名空间下配置文件引用原理分析

    这篇文章主要介绍了Nacos配置中心同一个命名空间下配置文件引用原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • java实现留言板功能实例

    java实现留言板功能实例

    这篇文章主要为大家详细介绍了JSP+JavaBean的留言板技术 ,JavaWeb登陆功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • Java互斥锁简单实例

    Java互斥锁简单实例

    这篇文章主要介绍了Java互斥锁,较为详细的分析了java互斥锁的概念与功能,并实例描述了java互斥锁的原理与使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • Java Lombok简介、使用、工作原理、优缺点

    Java Lombok简介、使用、工作原理、优缺点

    这篇文章主要介绍了Java Lombok简介、使用、工作原理、优缺点的相关资料,帮助大家更好的理解和学习使用Java Lombok,感兴趣的朋友可以了解下
    2021-03-03
  • springboot Junit 执行顺序详解

    springboot Junit 执行顺序详解

    这篇文章主要介绍了springboot Junit 执行顺序,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • SpringBoot2.x 集成腾讯云短信的详细流程

    SpringBoot2.x 集成腾讯云短信的详细流程

    本文主要对SpringBoot2.x集成腾讯云短信进行简单总结,其中SpringBoot使用的2.4.5版本,本文通过业务流程图实例代码相结合给大家介绍的非常详细,需要的朋友参考下吧
    2021-06-06
  • 一文彻底搞懂Java BIO、NIO、AIO的核心区别

    一文彻底搞懂Java BIO、NIO、AIO的核心区别

    这篇文章主要介绍了Java BIO、NIO、AIO核心区别的相关资料,BIO、NIO、AIO是Java中三种核心的IO模型,本质是操作系统层面 IO操作的不同处理方式,需要的朋友可以参考下
    2026-01-01

最新评论