PDFに画像を挿入、置換、削除、抽出する方法（Java）

テキストと比較して、画像は通常、意味を伝えやすく、PDFドキュメントをより魅力的なものにすることができます。画像はPDFにおいて重要な役割を果たすため、**PDFへの画像を挿入、置換、削除、抽出する方法**を知っておくことは、すべての開発者にとって真の利益となり得ます。この記事では、[Free Spire.PDF for Java](https://jp.e-iceblue.com/introduce/free-spire-pdf-for-java.html)を使用して、PDF内の画像関連の操作を処理する方法を紹介します。

- **[PDFに画像を指定した位置に挿入する](#pdfに画像を指定した位置に挿入する)**
- **[PDF内の画像を別の画像に置き換える](#pdf内の画像を別の画像に置き換える)**
- **[PDF内の指定した画像を削除する](#pdf内の指定した画像を削除する)**
- **[PDFから画像を抽出する](#pdfから画像を抽出する)**

## 【依存関係の追加】

> **この方法は、無料のFree Spire.PDF for Javaが必要ですので、先にjarファイルをインポートしてください。**

### 1. Maven

Maven を使用している場合、プロジェクトの pom.xml ファイルに以下のコードを追加することで、簡単にアプリケーションに JAR ファイルをインポートすることができます。

```XML
<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.pdf.free</artifactId>
        <version>5.1.0</version>
    </dependency>
</dependencies>
```

### 2. 公式サイトよりJarファイルをダウンロード

まず、[Free Spire.PDF for Java](https://jp.e-iceblue.com/download/free-spire-pdf-for-java.html) の公式サイトよりzipファイルをダウンロードします。zipファイルを解凍し、libフォルダの下にあるSpire.Pdf.jarファイルを依存関係としてプロジェクトにインポートしてください。

## PDFに画像を指定した位置に挿入する

**drawImage()** メソッドは、指定した幅と高さの画像を、PDFページ上の指定した位置に描画するために使用されます。したがって、描画の前にあらかじめ画像のサイズを変更する必要はありません。

> **以下は、Javaで新しいPDFドキュメントに画像を挿入するための主な手順です。**

- **PdfDocument** クラスのオブジェクトを作成します。
- **PdfDocument.getPages().add()** メソッドを使用して、PDFにページを追加します。
- **PdfImage.fromFile()** メソッドを使用して画像を読み込みます。
- 画像のサイズとページ内の位置を指定します。
- **PdfPageBase.getCanvas.drawImage()** メソッドを使用して、ページ上に画像を描画します。
- PDFドキュメントを保存し ます。

**Java**

```Java
import com.spire.pdf.FileFormat;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.PdfImage;

public class insertImage {

    public static void main(String[] args) {

        //PdfDocumentクラスのオブジェクトを作成する
        PdfDocument doc = new PdfDocument();

        //ページの余白を設定する
        doc.getPageSettings().setMargins(30);

        //ページを追加する
        PdfPageBase page = doc.getPages().add();

        //画像を読み込む
        PdfImage image = PdfImage.fromFile("C:/Sample.jpg");

        //画像の幅と高さをPDFで指定する
        float width = image.getWidth() * 0.5f;
        float height = image.getHeight() * 0.5f;

        //画像の描画位置を指定する
        double x = 0f;
        float y = 0f;

        //ページに画像を描く
        page.getCanvas().drawImage(image, x, y, width, height);

        //ドキュメントを保存する
        doc.saveToFile("画像の挿入.pdf", FileFormat.PDF);
    }
}
```

### 【結果のPDFファイル】

![PDFに画像を指定した位置に挿入する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/bb2bebe8-adc0-9441-ad70-4cedf0f65696.png)

## PDF内の画像を別の画像に置き換える

**replaceImage()** メソッドを使用すると、PDF内の画像を置き換えることができます。このメソッドは、置き換えられた新しい画像のサイズを自動的に変更し、周囲にある他の要素の可読性に影響を与えないようにします。

> **以下は、その手順です。**

- **PdfDocument** クラスのオブジェクトを作成します。
- **PdfDocument.loadFromFile()** メソッドを使用して既存の PDF ドキュメントを読み込みます。
- **PdfDocument.getPages().get()** メソッドを使用して特定のページを取得します。
- **PdfImage.fromFile()** メソッドを使用して画像を読み込みます。
- **PdfDocument.replaceImage()** メソッドを使用して、ドキュメント内の特定の画像を新しい画像に置き換えます。
- PDFドキュメントを保存します。

**Java**

```Java
import com.spire.pdf.FileFormat;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.PdfImage;

public class replaceImage {
    public static void main(String[] args) {

        //PdfDocumentクラスのオブジェクトを作成する
        PdfDocument doc = new PdfDocument();

        //PDFファイルを読み込む
        doc.loadFromFile("C:/Sample.pdf");

        //最初のページを取得する
        PdfPageBase page = doc.getPages().get(0);

        //画像を読み込む
        PdfImage image = PdfImage.fromFile("C:/Sample1.jpg");

        //ページ内の最初の画像を読み込まれた画像に置き換える
        page.replaceImage(0, image);

        //ファイルを保存する
        doc.saveToFile("画像の置き換え.pdf", FileFormat.PDF);
    }
}
```

### 【結果のPDFファイル】

![PDF内の画像を別の画像に置き換える](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/a3fa8621-7f1d-108a-2197-2cbf7a64b3fd.png)

## PDF内の指定した画像を削除する

PDFドキュメント内の画像は、**deleteImage()** メソッドを使用することで簡単に削除することができます。

> **以下はその手順です。**

- **PdfDocument** クラスのオブジェクトを作成します。
- **PdfDocument.loadFromFile()** メソッドを使用して既存の PDF ドキュメントを読み込みます。
- **PdfDocument.getPages().get()** メソッドを使用して特定のページを取得します。
- **PdfPageBase.deleteImage(int imageIndex)** メソッドを使用して、特定の画像をそのインデックスで削除します。
- PDFドキュメントを保存します。

**Java**

```Java
import com.spire.pdf.FileFormat;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;

public class removeImage {
    public static void main(String[] args) {

        //Create a PdfDocument object
        PdfDocument doc = new PdfDocument();

        //Load the sample PDF file
        doc.loadFromFile("C:/Sample.pdf");

        //Get the specified page
        PdfPageBase page = doc.getPages().get(0);

        //Delete a particular image by its index
        page.deleteImage(0);

        //Save the file
        doc.saveToFile("画像の削除.pdf", FileFormat.PDF);
    }
}
```

### 【結果のPDFファイル】

![PDF内の指定した画像を削除する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/5a1d9b81-5788-5321-5d24-0ad6dae186fa.png)
 
## PDFから画像を抽出する

PDFページの画像は、**extractImages()** メソッドを使用して抽出することができます。

> **以下は、Free Spire.PDF for Javaを使用してPDFドキュメントからすべての画像を抽出する手順です。**

- **PdfDocument** クラスのオブジェクトを作成します。
- **PdfDocument.loadFromFile()** メソッドを使用して既存の PDF ドキュメントを読み込みます。
- **PdfDocument.getPages().get()** メソッドを使用して、特定のページを取得します。
- ドキュメント内のすべてのページをループし、**PdfPageBase.extractImages()** メソッドを使用して特定のページから画像を抽出します。
- 画像を.pngファイルとしてフォルダに保存します。

**Java**

```Java
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class extractImages {

    public static void main(String[] args) throws IOException {

        //PdfDocumentクラスのインスタンスを作成する
        PdfDocument doc = new PdfDocument();

        //PDFドキュメントを読み込む
        doc.loadFromFile("C:/Sample.pdf");

        //int型変数を宣言する
        int index = 0;

        //全ページをループする
        for (Object page : doc.getPages()) {

            PdfPageBase pageBase = (PdfPageBase) page;

            //指定されたページから画像を抽出する
            for (BufferedImage image : pageBase.extractImages()) {

                //ファイルのパスと名前を指定する
                File output = new File("C:/抽出された画像/" + String.format("Image_%d.png", index++));

                //画像を.pngファイルとして保存する
                ImageIO.write(image, "PNG", output);
            }
        }
    }
}
```

### 【抽出された画像】

![PDFから画像を抽出する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/d32822e4-716a-2e0d-7353-98353e93b5db.png)

> **この記事では、PDFドキュメント内の画像を扱ういくつかの方法を紹介します。PDFドキュメントの取り扱いに関するより詳細な情報は、[Spire.PDF Forum](https://www.e-iceblue.com/forum/spire-pdf-f7.html)をご覧下さい。**