
在 Java 项目开发中,经常会遇到 Word 文档解析需求,比如文档内容归档、数据结构化提取、素材批量导出等。传统 POI 框架处理 Word 文档存在 API 繁琐、图片提取兼容性差、高版本 docx 适配漏洞多等问题,而 Spire.Doc for Java 是一款轻量化、高性能的 Word 文档处理组件,无需依赖 Office 环境,能够极简实现 Word 文本、图片、表格等内容的精准提取,适配绝大多数企业级开发场景。
本文将手把手讲解如何通过 Maven 引入 Spire.Doc 依赖,分别实现 Word 文档全文文本提取、内嵌图片批量导出,提供完整可运行代码及详细解析,零基础也可快速上手。
Spire.Doc for Java 是专业的 Java Word 处理库,支持 .doc、.docx 全格式文档解析,核心优势如下:无需安装 Microsoft Office、接口简洁易用、解析精度高、支持批量文档处理,完美解决原生 POI 解析 Word 出现的乱码、图片丢失、格式错乱等问题。
首先,我们需要在项目的 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 项目,自动下载对应依赖包,即可开展文档解析开发。
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();
}
}
}
}Document 核心对象,通过loadFromFile() 加载本地 Word 文档,支持相对路径与绝对路径;getText() 快速解析全文文本,自动保留文档原有文字排版逻辑;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()+"张图片");
}
}DocumentObjectType.Picture 精准匹配图片节点,将图片对象存入集合;document.dispose() 手动释放文档资源,降低内存占用。本文基于 Spire.Doc for Java 组件,实现了 Word 文档文本提取、图片批量导出两大核心功能,相较于传统 POI 方案,代码更简洁、兼容性更强、解析稳定性更高。该方案可快速落地于文档解析、内容检索、素材提取、办公自动化等业务场景,是 Java 开发中处理 Word 文档的优质解决方案。开发者可基于本文代码拓展功能,比如指定段落文本提取、图片格式自定义、批量文档遍历解析等。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。