Java 实战:基于 Spire.Doc 高效提取 Word 文档文本与图片

在 Java 项目开发中,经常会遇到 Word 文档解析需求,比如文档内容归档、数据结构化提取、素材批量导出等。传统 POI 框架处理 Word 文档存在 API 繁琐、图片提取兼容性差、高版本 docx 适配漏洞多等问题,而 Spire.Doc for Java 是一款轻量化、高性能的 Word 文档处理组件,无需依赖 Office 环境,能够极简实现 Word 文本、图片、表格等内容的精准提取,适配绝大多数企业级开发场景。

本文将手把手讲解如何通过 Maven 引入 Spire.Doc 依赖,分别实现 Word 文档全文文本提取、内嵌图片批量导出,提供完整可运行代码及详细解析,零基础也可快速上手。

一、技术简介与环境准备

1.1 组件优势

Spire.Doc for Java 是专业的 Java Word 处理库,支持 .doc、.docx 全格式文档解析,核心优势如下:无需安装 Microsoft Office、接口简洁易用、解析精度高、支持批量文档处理,完美解决原生 POI 解析 Word 出现的乱码、图片丢失、格式错乱等问题。

1.2 Maven 依赖配置

首先,我们需要在项目的 pom.xml 文件中添加 Spire.Doc for Java 的依赖仓库和依赖项:

复制代码
<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.com/nexus/content/groups/public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.doc</artifactId>
        <version>14.7.4</version>
    </dependency>
</dependencies>

配置完成后,刷新 Maven 项目,自动下载对应依赖包,即可开展文档解析开发。

二、实战一:提取 Word 全部文本并导出 TXT 文件

Spire.Doc 提供极简的 getText() 方法,可一键获取文档全部纯文本内容,自动过滤图片、格式符号、控件等无效内容,同时支持将提取的文本持久化保存为 TXT 文件,方便内容归档。

完整代码实现

复制代码
import com.spire.doc.Document;
import java.io.FileWriter;
import java.io.IOException;

public class ExtractText {
    public static void main(String[] args) throws IOException {
        // 1. 创建文档对象并加载本地Word文档
        Document document = new Document();
        document.loadFromFile("sample1.docx");

        // 2. 提取文档全部文本内容
        String text=document.getText();

        // 3. 将文本写入本地TXT文件
        writeStringToTxt(text,"ExtractedText.txt");
        System.out.println("Word文本提取完成,已保存至ExtractedText.txt");
    }

    /**
     * 文本内容写入TXT文件工具方法
     * @param content 提取的文本内容
     * @param txtFileName 输出文件名
     * @throws IOException IO异常
     */
    public static void writeStringToTxt(String content, String txtFileName) throws IOException{
        // 追加模式写入文件
        FileWriter fWriter= new FileWriter(txtFileName,true);
        try {
            fWriter.write(content);
        }catch(IOException ex){
            ex.printStackTrace();
        }finally{
            // 强制刷新流并关闭资源,避免内存泄漏
            try{
                fWriter.flush();
                fWriter.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }
}

代码解析

  1. 初始化 Document 核心对象,通过loadFromFile() 加载本地 Word 文档,支持相对路径与绝对路径;
  2. 调用 getText() 快速解析全文文本,自动保留文档原有文字排版逻辑;
  3. 自定义文件写入工具方法,采用追加模式写入 TXT 文件,finally 代码块强制关闭流,规避 IO 资源泄漏问题。

三、实战二:批量提取 Word 内嵌图片并导出 PNG

Word 文档中的图片嵌套在文档节点中,无法通过简单 API 直接获取。Spire.Doc 支持遍历文档树形结构,精准识别所有图片节点,批量提取图片并导出为 PNG 格式,适配正文、段落、文本框中所有内嵌图片。

完整代码实现

复制代码
import com.spire.doc.*;
import com.spire.doc.documents.*;
import com.spire.doc.fields.*;
import com.spire.doc.interfaces.*;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.*;

public class ExtractImage {
    public static void main(String[] args) throws IOException {
        // 1. 加载Word文档
        Document document = new Document();
        document.loadFromFile("sample2.docx");

        // 2. 初始化队列,遍历文档树形节点
        Queue<ICompositeObject> nodes = new LinkedList<>();
        nodes.add(document);
        List<BufferedImage> images = new ArrayList<>();

        // 3. 深度遍历文档,筛选图片节点
        while (nodes.size() > 0) {
            ICompositeObject node = nodes.poll();
            for (int i = 0; i < node.getChildObjects().getCount(); i++)
            {
                IDocumentObject child = node.getChildObjects().get(i);
                // 递归添加复合节点,继续深度遍历
                if (child instanceof ICompositeObject)
                {
                    nodes.add((ICompositeObject) child);
                }
                // 识别图片节点并收集图片
                else if (child.getDocumentObjectType() == DocumentObjectType.Picture)
                {
                    DocPicture picture = (DocPicture) child;
                    images.add(picture.getImage());
                }
            }
        }

        // 4. 创建输出目录,批量保存图片
        File outputDir = new File("output");
        if (!outputDir.exists()){
            outputDir.mkdirs();
        }
        for (int i = 0; i < images.size(); i++) {
            File file = new File(String.format("output/extractImage-%d.png", i));
            ImageIO.write(images.get(i), "PNG", file);
        }
        System.out.println("图片提取完成,共提取"+images.size()+"张图片");
    }
}

代码解析

  1. 采用队列实现文档节点深度遍历,覆盖文档所有层级节点,避免遗漏嵌套图片;
  2. 通过 DocumentObjectType.Picture 精准匹配图片节点,将图片对象存入集合;
  3. 自动判断输出目录是否存在,不存在则创建,避免文件保存报错;
  4. 循环将图片以 PNG 格式批量导出,自定义文件名有序存储,方便后续管理。

四、运行注意事项与常见问题

  1. 文档路径问题 :测试时将 Word 文档放置项目根目录,正式环境建议使用绝对路径,防止文件找不到异常;
  2. 依赖加载失败 :若仓库拉取依赖失败,可手动下载 Jar 包导入项目;
  3. 图片空白问题 :遍历逻辑覆盖全节点,可完美适配图文混排、嵌套复杂的 Word 文档,无图片丢失、空白问题;
  4. 资源释放 :批量处理文档时,可通过 document.dispose() 手动释放文档资源,降低内存占用。

五、总结

本文基于 Spire.Doc for Java 组件,实现了 Word 文档文本提取、图片批量导出两大核心功能,相较于传统 POI 方案,代码更简洁、兼容性更强、解析稳定性更高。该方案可快速落地于文档解析、内容检索、素材提取、办公自动化等业务场景,是 Java 开发中处理 Word 文档的优质解决方案。开发者可基于本文代码拓展功能,比如指定段落文本提取、图片格式自定义、批量文档遍历解析等。

相关推荐
是未才1 小时前
从输入 URL 到页面返回:DNS、路由、TLS 与 HTTP 完整链路
java·后端·计算机网络
ttod_qzstudio2 小时前
Java 常用语法极简通关(五):类与对象——字段、方法、构造器、this 与 static
java·开发语言·python
萧瑟余晖3 小时前
Java深入解析篇十七之Spring Security
java·开发语言·spring
北域码匠5 小时前
PID 控制算法完整详解(C# 原生实现,无第三方库)
c#·pid控制·工控开发·闭环控制·自动控制算法·数字pid·增量式pid
离陌在学C#5 小时前
C# 重载与重写:深入理解面向对象编程的核心概念
java·c#
洛阳泰山5 小时前
AI 应用层被 Python 卷成红海,为什么我偏要用 Java 造一个 RAG + 工作流引擎?
java·人工智能·后端
二十雨辰6 小时前
[Java]-Spring面试题
java·开发语言
老马历写记6 小时前
Maven POM 依赖管理总结
java·maven·system·pom·optional
古法安卓6 小时前
Android-车机 GNSS 定位数据接收问题排查
android·java·android studio
蔬菜_6 小时前
前端转全栈-day5(数组、list、set)
java·前端·数据结构·list