在 Word 文档中,文本和图像是丰富的文档内容的重要组成部分。当用户需要单独处理文档中的文本或图像时,通过编写程序从 Word 文档中将其提取出来是最佳选择。特别是在处理大型文档时,通过程序提取文本比手动复制更加便捷高效。此外,提取文本和图像后,用户还能对这些文本和图像进一步编辑制作成其他文档,或直接共享给他人。本文将展示如何使用 Spire.Doc for Java 在 Java 环境中提取 Word 文档中的文本和图像。
安装 Spire.Doc for Java
首先,您需要在 Java 程序中添加 Spire.Doc.jar 文件作为依赖项。您可以从此链接下载 JAR 文件。如果您使用 Maven,则可以通过在 pom.xml 文件中添加以下代码导入 JAR 文件。
<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>13.10.6</version>
    </dependency>
</dependencies>
Java 从 Word 文档中提取文本
Spire.Doc for Java 支持从 Word 文档中直接提取文本并将其保存为文本文件,这样用户就可以不受设备限制地查看和编辑文本内容。以下是从 Word 文档中提取文本的详细步骤:
- 创建 Document 类的对象。
 - 使用 Document.loadFromFile() 方法加载 Word 文档。
 - 使用 Document.getText() 方法从文档中获取文本字符串。
 - 调用 writeStringToTxt() 方法将字符串写入文本文件。
 
- Java
 
import com.spire.doc.Document;
import java.io.FileWriter;
import java.io.IOException;
public class ExtractText {
    public static void main(String[] args) throws IOException {
        //创建一个Document类的对象
        Document document = new Document();
        //载入Word文档
        document.loadFromFile("示例.docx");
        //以字符串形式从文档中获取文本
        String text=document.getText();
        //将字符串写入文本文件中
        writeStringToTxt(text,"提取文本.txt");
    }
    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();
            }
        }
    }
}
Java 从 Word 文档中提取图片
通过提取图像,用户可以轻松地将文档中的图像数据导入其他应用程序进行进一步处理,或是分享到社交媒体。Spire.Doc for Java 允许用户从 Word 文档中提取图像并将其保存到指定路径。以下是详细操作步骤:
- 创建 Document 类的对象。
 - 使用 Document.loadFromFile() 方法加载 Word 文档。
 - 创建一个复合对象队列。
 - 使用 Queue<ICompositeObject>.add(ICompositeObjecte) 方法将根文档元素添加到遍历队列中。
 - 创建一个 ArrayList 对象来存储提取的图像。
 - 遍历文档树,并通过遍历每个节点的子节点来检查复合对象或图片对象。
 - 检查子元素是否为合成对象。如果是,则将其添加到队列中,以便进一步处理。
 - 检查子元素是否为图片对象。如果是,则提取其图像数据并将其添加到提取的图像列表中。
 - 使用 ImageIO.write(RenderedImage im, String formatName, File output) 方法将图片保存到特定文件夹。
 
- Java
 
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 ExtractImages {
    public static void main(String[] args) throws IOException {
        //创建一个Document类的对象
        Document document = new Document();
        //载入Word文档
        document.loadFromFile("示例.docx");
        //创建队列并添加根文档元素到队列中
        Queue<ICompositeObject> nodes = new LinkedList<>();
        nodes.add(document);
        //创建一个ArrayList对象来存储提取的图像
        List<BufferedImage> images = new ArrayList<>();
        //循环遍历文档树
        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());
                }
            }
        }
        //将图像保存到指定文件夹
        for (int i = 0; i < images.size(); i++) {
            File file = new File(String.format("Output/Images/提取图片-%d.png", i));
            ImageIO.write(images.get(i), "PNG", file);
        }
    }
}
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
    


					



