Javaを使用してWordでテキストと画像を抽出する方法

この記事では、Javaを使用してWord文書のテキストや画像を抽出または読み取る方法を紹介します。ここでのテキストと画像の抽出には、ドキュメントの本文とヘッダーとフッターのテキストと画像を同時に抽出することが含まれます。

使用したツール：Spire.Doc for Java

JARファイルのインポート方法：

方法1：公式Webサイトからインストールパッケージを[ダウンロード](https://www.e-iceblue.com/Download/doc-for-java.html)します。プログラムの下に新しいディレクトリを作成し、名前を付けます（この例ではlibという名前です）。コントロールパッケージのlibフォルダにあるjarを（下の画像1に示すように）プログラムに新しく作成したディレクトリにコピーします。jarファイルをコピーした後、jarファイルを右クリックし、「ライブラリとして追加」を選択します。インポートを完了します（下の画像2のように）。
**画像１**
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/8168182a-5793-b499-19b7-3e1310b7cc7c.png)

**画像２**
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/8035b9f7-4fa7-5f61-d502-06b603eccd8a.png)

方法2：Mavenを介してインポートします。
テストドキュメントは次のとおりです。
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/98b2c56a-0d34-55ba-b51e-e8b88de820ec.png)

## Javaコード一覧
【例1】	Wordのテキストを抽出する

```
import com.spire.doc.*;
import java.io.FileWriter;
import java.io.IOException;

public class ExtractText {
    public static void main(String[] args) throws IOException{
        //テストドキュメントをロードする
        Document doc = new Document();
        doc.loadFromFile("C:\\Users\\Administrator\\Desktop\\test.docx");

        //テキストを取得してStringとして保存する
        String text = doc.getText();

        //StringをTxt書き込む
        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();
            }
        }
    }
}
```

テキストを抽出した結果：
![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/a42549ed-851d-226d-68c2-78d28580c00d.png)

【例2】Wordの画像を抽出する

```
import com.spire.doc.Document;
import com.spire.doc.documents.DocumentObjectType;
import com.spire.doc.fields.DocPicture;
import com.spire.doc.interfaces.ICompositeObject;
import com.spire.doc.interfaces.IDocumentObject;
import javax.imageio.ImageIO;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

public class ExtractImg {
    public static void main(String[] args) throws IOException {
        //Wordドキュメントをロードする
        Document document = new Document();
        document.loadFromFile("C:\\Users\\Administrator\\Desktop\\test.docx");

        //Queueオブジェクトを作成する
        Queue nodes = new LinkedList();
        nodes.add(document);

        //Listオブジェクトを作成する
        List images = new ArrayList();

        //ドキュメント内の子オブジェクトをドラパースする
        while (nodes.size() > 0) {
            ICompositeObject node = (ICompositeObject) 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);

                    //画像を取得してListに追加する
                    if (child.getDocumentObjectType() == DocumentObjectType.Picture) {
                        DocPicture picture = (DocPicture) child;
                        images.add(picture.getImage());
                    }
                }
            }
        }
        //画像をPNG形式のファイルとして保存する
        for (int i = 0; i < images.size(); i++) {
            File file = new File(String.format("画像-%d.png", i));
            ImageIO.write((RenderedImage) images.get(i), "PNG", file);
        }

    }
}
```

画像を抽出した結果：
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/fa0a54d7-3b63-0fa5-50ae-acec09d1b4c8.png)

今回のWordでテキストと画像を抽出する方法は以上でした、最後まで読んでいただきありがとうございます。