JavaはPDFテキストと画像の抽出を実現します

PDFファイルは常に多くの優れた情報コンテンツを携帯するために使われています。これらの情報をより良く利用するためには、いくつかのツールを使ってPDFからテキストと画像情報を抽出する必要があります。以下はJavaを通してPDFを抽出するテキストと写真を紹介します。
#####ツール使用: 

- [Free Spire Pdf for JAVA 2.4.4(無料版)](https://www.e-iceblue.com/Download/pdf-for-java-free.html)
- Intellij IDEA / Eclipse

#####Jarパッケージ導入:

- 方法1: Free Spire.Pdf for Javaのストレスをオフィシャルサイトからダウンロードした後、IDEA又はEclipseにおいてShift+Ctrl+Alt+Sに追加導入Spire.Pdf.jarパケットをプログラムに追加することで、jarファイルを伸張経路下のlibフォルダで取得することができる。jarパッケージの導入結果は以下の通り：

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/06d36e2f-57ee-aeec-8ac9-0b15aeae15df.png)

- 方法2: mavenライブラリから導入する。導入方法を参考にする（https://www.e-iceblue.com/Tutorials/Licensing/How-to-install-Spire.PDF-for-Java-from-Maven-Repository.html）。

テストソースドキュメントは以下の通り：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/fa1db07b-246c-5102-9a3e-6a3f94ae81a0.png)
##Javaコードの例参照：

####【例1】PDFのテキスト内容を抽出する
**ステップ1：** 名前空間を追加します;

```java
import com.spire.pdf.*;
import java.io.FileWriter;
```
**ステップ2：** PDFのインスタンスを作成し、PDFソースファイルをロードする;

```java
//Create the PDF
PdfDocument doc = new PdfDocument();
//Load the PDF file
doc.loadFromFile("data/Sample.pdf");
```
**ステップ3：** StringBuider法を使用して、PDFドキュメント全体を巡回巡回する文字バッファの例を定義する;

```java
// Traverse the PDF
StringBuilder buffer = new StringBuilder();
for(int i = 1; i<doc.getPages().getCount(); i++){
    PdfPageBase page = doc.getPages().get(i);
    buffer.append(page.extractText());
}
```
**ステップ4：** 1つのwriterのインスタンスを定義してバッファエリアにデータを書き込み、write（）を使ってバッファエリアのデータをtext.txtファイルに書き込み、保存する。

```java
//save text
String fileName = "output/text.txt";
FileWriter writer = new FileWriter(fileName);
writer.write(buffer.toString());
writer.flush();
writer.close();
```
テキスト抽出結果:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/d0d740de-23b9-2650-6ff3-528c9a407829.png)
####【例2】PDF中のピクチャを抽出する
**ステップ1：** 名前空間を追加します;

```java
import com.spire.pdf.*;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
```
**ステップ2：** PDFのインスタンスを作成し、PDFソースファイルをロードする;

```java
        //Create the PDF
        PdfDocument pdf = new PdfDocument();
	   //Load the PDF file
        pdf.loadFromFile("data/Sample.pdf");
```
**ステップ3：** forループはPDFの各ページを巡回し、extractImages（）方法を使って指定ページの画像を取得し、最後にPNG形式で画像を保存します。

```java
        // Declare an int variable
	 int index = 0;
        // loop through the pages
        for (int i= 0;i< pdf.getPages().getCount(); i ++){
            //Get the PDF pages
            PdfPageBase page = pdf.getPages().get(i);
            // Extract images from a particular page 
            for (BufferedImage image : page.extractImages()) {
            //specify the file path and name
                File output = new File("output/" + String.format("Image_%d.png", index++));                
            //Save image as .png file    
            ImageIO.write(image, "PNG", output);
            }
        }
```
画像抽出結果:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/00706261-24b5-4b73-6720-5f166d91b855.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/2bc816c8-eb94-0f6b-7302-af6e5c6e2e49.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/9ab35c7b-3b1f-bcda-9129-66b33a4c831e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/8c8e73a7-0354-31b7-3eda-025013b3c57d.png)