Java提取Word文档文本与图片的完整方法

 更新时间:2026年06月24日 11:24:23   作者:缺点内向  
在文档处理工作流中,从 Word 文件中提取核心内容是一项基础而频繁的需求,本文将介绍如何利用 Java 语言,从 Word 文档中分别提取文本内容和图片资源,有需要的小伙伴可以了解下

在文档处理工作流中,从 Word 文件中提取核心内容是一项基础而频繁的需求。无论是为了文本分析、数据迁移,还是构建文档素材库,将文字和图片分别提取出来都能显著提高后续处理的灵活性。手动操作在面对批量文档时效率较低,而编程方式则能够实现自动化处理。本文将介绍如何利用 Java 语言,从 Word 文档中分别提取文本内容和图片资源。

环境配置

本文示例基于 Spire.Doc for Java 库实现。若使用 Maven 管理项目依赖,可在 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.6.0</version>
    </dependency>
</dependencies>

对于不使用 Maven 的项目,可下载 JAR 包并手动添加到项目的构建路径中。

文本提取:获取文档全部文字内容

提取 Word 文档中的文本是最常见的操作之一。该库提供了直接获取全文文本的方法,能够快速将文档内容转换为纯文本字符串。

实现步骤:

  1. 创建 Document 对象并加载Word文档;
  2. 调用 Document.getText() 方法获取所有文本内容;
  3. 将获取的字符串写入文本文件或进行后续处理。
import com.spire.doc.Document;
import java.io.FileWriter;
import java.io.IOException;

public class ExtractTextDemo {
    public static void main(String[] args) throws IOException {
        Document document = new Document();
        document.loadFromFile("示例文档.docx");

        // 获取文档中的全部文本
        String text = document.getText();

        // 写入文本文件
        try (FileWriter writer = new FileWriter("文档文本内容.txt")) {
            writer.write(text);
        }

        document.dispose();
    }
}

这种方式的优点在于代码简洁,能够快速获取文档中的全部文字内容。需要注意的是,提取结果不保留任何格式信息(如字体、颜色、字号等),适合用于全文搜索、文本分析或内容摘要等场景。

图片提取:遍历文档树获取图片资源

Word 文档中的图片可能嵌入在正文段落、表格、文本框、页眉页脚等不同位置。因此,提取图片需要遍历整个文档的对象结构,识别所有图片类型的元素。

实现思路:

  1. 创建 Document 对象并加载文档;
  2. 使用队列或递归方式遍历文档中的复合对象;
  3. 检查每个子对象的类型是否为图片;
  4. 如果是图片,提取其图像数据并保存为文件。
import com.spire.doc.Document;
import com.spire.doc.DocumentObjectType;
import com.spire.doc.fields.DocPicture;
import com.spire.doc.interfaces.IDocumentObject;
import com.spire.doc.interfaces.ICompositeObject;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.LinkedList;
import java.util.Queue;

public class ExtractImagesDemo {
    public static void main(String[] args) throws IOException {
        Document document = new Document();
        document.loadFromFile("示例文档.docx");

        Queue<ICompositeObject> nodes = new LinkedList<>();
        nodes.add(document);

        int imageIndex = 0;

        while (!nodes.isEmpty()) {
            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;
                    BufferedImage image = picture.getImage();
                    File outputFile = new File(String.format("图片_%d.png", imageIndex++));
                    ImageIO.write(image, "PNG", outputFile);
                }
            }
        }

        document.dispose();
        System.out.println("共提取图片:" + imageIndex + " 张");
    }
}

这段代码能够遍历文档中的所有图片,包括嵌入在表格、文本框或页眉页脚中的图片,并将其保存为 PNG 格式。如果需要 JPG 格式,可修改 ImageIO.write() 的第二个参数。

提取批注中的内容

批注是 Word 文档中常见的协作标记,其中也可能包含重要的文字信息或图片。提取批注内容需要从 Document.getComments() 集合入手。

提取批注文本的示例:

import com.spire.doc.Document;
import com.spire.doc.Comment;
import com.spire.doc.documents.Paragraph;

public class ExtractCommentsDemo {
    public static void main(String[] args) {
        Document doc = new Document();
        doc.loadFromFile("含批注的文档.docx");

        for (int i = 0; i < doc.getComments().getCount(); i++) {
            Comment comment = doc.getComments().get(i);
            System.out.println("批注 #" + (i + 1) + ":");
            for (int j = 0; j < comment.getBody().getParagraphs().getCount(); j++) {
                Paragraph para = comment.getBody().getParagraphs().get(j);
                System.out.println(para.getText());
            }
        }

        doc.dispose();
    }
}

提取批注中的图片则需要进一步遍历批注内部的段落,检查其中是否包含 DocPicture 对象,方法与提取正文图片类似。

应用场景与处理建议

文本提取适用于全文检索、内容比对、语料库构建等场景;图片提取则适用于素材归档、图像识别预处理、多媒体内容管理等需求。

性能考虑:对于包含大量图片或复杂结构的文档,遍历操作可能耗时较长,建议在批量处理时控制并发数量。

格式兼容:不同版本的 Word 文档(.doc与.docx)内部结构存在差异,该库对两种格式均提供支持,但在处理旧版 .doc 文件时,部分格式特性可能受限。

资源管理:每次操作完成后调用 dispose() 方法释放文档对象占用的资源,是避免内存泄漏的规范做法。

总结

本文介绍了利用 Java 语言从 Word 文档中提取文本和图片的技术方案。全文文本提取通过 Document.getText() 方法可一次性完成,操作简便,结果适合用于纯文本场景。图片提取则需要遍历文档的对象树结构,识别并保存所有图片类型的元素,该方法能够覆盖正文、表格、文本框和页眉页脚等多个位置的图片资源。此外,针对批注中的内容,可通过 Document.getComments() 集合进行定向提取。这些功能组合起来,能够满足文档内容解析和资源分离的常见需求,在数据迁移、内容分析和文档归档等应用场景中具有一定的参考价值。

到此这篇关于Java提取Word文档文本与图片的完整方法的文章就介绍到这了,更多相关Java提取Word文本与图片内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java数组从定义到操作全解析

    Java数组从定义到操作全解析

    这篇文章详细介绍了Java数组的概念、声明、创建、访问、初始化、边界、基础操作以及Arrays类的常用方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-11-11
  • java 音频转换wav格式标准音频的操作

    java 音频转换wav格式标准音频的操作

    这篇文章主要介绍了java 音频转换wav格式标准音频的操作,主要是使用ffmpeg命令进行转换,该工具类主要是为了将各类音频转为wav标准格式,其中可以调节采样率、声道数等指标,依赖maven环境,需要的朋友可以参考下
    2021-10-10
  • 玩转spring boot 结合AngularJs和JDBC(4)

    玩转spring boot 结合AngularJs和JDBC(4)

    玩转spring boot,这篇文章主要介绍了结合AngularJs和JDBC,玩转spring boot,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • IDEA生成javadoc的实现步骤

    IDEA生成javadoc的实现步骤

    Javadoc是一种用于生成API文档的工具,它可以根据代码中特定格式的注释自动生成文档,本文主要介绍了IDEA生成javadoc的实现步骤,感兴趣的可以了解一下
    2023-10-10
  • SpringBoot之controller参数校验详解

    SpringBoot之controller参数校验详解

    介绍了Java中使用@Validated和@Valid进行参数校验的方法,包括不同标签的使用场景、基本属性和一些常用的注解类型,同时,还讨论了如何在控制器中使用这些校验标签,以及如何处理校验结果和自定义错误消息,最后,还介绍了如何实现分组校验和嵌套校验,并提供了一些示例代码
    2024-11-11
  • 解决Spring/SpringBoot @RequestParam注解无法读取application/json格式数据问题

    解决Spring/SpringBoot @RequestParam注解无法读取application/json

    本文介绍了如何通过自定义HandlerMethodArgumentResolver,使Spring的@RequestParam注解支持接收JSON格式参数,从而避免为少量参数单独创建实体类,作者详细分析了Spring源码并给出了解决方案和相关配置步骤
    2025-10-10
  • @RequestBody获取不到参数的问题

    @RequestBody获取不到参数的问题

    这篇文章主要介绍了@RequestBody获取不到参数的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Java结合百度云存储BCS代码分享

    Java结合百度云存储BCS代码分享

    最近云是一个很热门的新概念,仿佛任何东西只要跟云相关联,就立马高大上起来,额,我们也追随潮流吧,项目中也结合一下云!!
    2014-10-10
  • Springboot中如何自动转JSON输出

    Springboot中如何自动转JSON输出

    这篇文章主要介绍了Springboot中如何自动转JSON输出,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Spring学习笔记3之消息队列(rabbitmq)发送邮件功能

    Spring学习笔记3之消息队列(rabbitmq)发送邮件功能

    这篇文章主要介绍了Spring学习笔记3之消息队列(rabbitmq)发送邮件功能的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-07-07

最新评论