C# を使用して PDF から画像を抽出する

PDF ファイルに、アートワーク、デザイン素材、レポートのグラフなどの価値のある画像が含まれている場合、これらの画像を抽出することで、これらの画像リソースを個別に保存することができます。これにより、後に異なるプロジェクトで使用する際に便利になり、毎回 PDF から画像を探す必要があることを避けることができます。この記事では、C# を使ってプログラム的に PDF 文書から画像を抽出する方法を紹介します。
* [C#で指定されたPDFページから画像を抽出する](#cで指定されたpdfページから画像を抽出する)
* [C#でPDF文書からすべての画像を抽出する]()

## .NET PDF ライブラリ（インストール）
PDF から画像を抽出するには、[**Spire.PDF for .NET**](https://www.e-iceblue.com/Introduce/pdf-for-net-introduce.html) ライブラリが必要です。このライブラリは NuGet を通じて直接インストールすることができます。
```
PM> Install-Package Spire.PDF
```
または、下記のリンクから製品パッケージをダウンロードし、手動で Spire.Pdf.dll をプロジェクトに追加することもできます。

https://www.e-iceblue.com/Download/download-pdf-for-net-now.html

## C#で指定されたPDFページから画像を抽出する
**`PdfImageHelper`** クラスは、ユーザーが PDF 文書内の画像を管理するのに役立ちます。指定された PDF ページから画像を抽出するには、以下の手順を参照してください。

1. `PdfDocument` クラスの `LoadFromFile()` メソッドを使用して、PDF ファイルを読み込みます。
1. `PdfDocument` クラスの `Pages[index]` プロパティを通じて、指定されたページを取得します。
1. **`PdfImageHelper`** オブジェクトを作成し、その GetImagesInfo() メソッドを使用して、ページ内の画像情報のコレクションを取得します。
1. 画像情報のコレクションを反復処理し、**`PdfImageInfo.Image.Save()`** メソッドを使用して、各画像を PNG 形式で指定されたファイルパスに保存します。

C#のコード：
```csharp
using Spire.Pdf;
using Spire.Pdf.Utilities;
using System.Drawing;

namespace ExtractImagesFromSpecificPage
{
    class Program
    {
        static void Main(string[] args)
        {
            // PDF 文書を読み込む
            PdfDocument pdf = new PdfDocument();
            pdf.LoadFromFile("抹茶.pdf");

            // 最初のページを取得する
            PdfPageBase page = pdf.Pages[0];

            // PdfImageHelper オブジェクトを作成する
            PdfImageHelper imageHelper = new PdfImageHelper();

            // ページ上の画像情報を取得する
            PdfImageInfo[] imageInfos = imageHelper.GetImagesInfo(page);

            // 画像情報を反復処理する
            for (int i = 0; i < imageInfos.Length; i++)
            {
                // 特定の画像情報を取得する
                PdfImageInfo imageInfo = imageInfos[i];

                // 指定された画像を取得する
                Image image = imageInfo.Image;

                // 画像を PNG 形式で保存する
                image.Save("画像\\img-" + i + ".png");
            }

            pdf.Dispose();
        }
    }
}
```
![ExtractImageFromPDFPage.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2811193/de14947c-27d6-4a50-8c1e-51e145f1791a.png)


## C#でPDF文書からすべての画像を抽出する

PDF文書内のすべての画像を取得するには、各ページを巡回して画像を抽出する必要があります。詳細は以下の手順を参照してください。

1. `PdfDocument` クラスの `LoadFromFile()` メソッドを使用して、PDF ファイルを読み込みます。
1. **`PdfImageHelper`** オブジェクトを作成します。
1. 文書内の各ページを反復処理します。
1. `PdfDocument` クラスの `Pages[index]` プロパティを通じて、指定されたページを取得します。
1. **`PdfImageHelper.GetImagesInfo()`** メソッドを使用して、ページ内の画像情報のコレクションを取得します。
1. 画像情報のコレクションを反復処理し、**`PdfImageInfo.Image.Save()`** メソッドを使用して、各画像を PNG 形式で指定されたファイルパスに保存します。


C#のコード：
```csharp
using Spire.Pdf;
using Spire.Pdf.Utilities;
using System.Drawing;

namespace ExtractAllImages
    {
        class Program
        {
            static void Main(string[] args)
            {
                // PDF 文書を読み込む
                PdfDocument pdf = new PdfDocument();
                pdf.LoadFromFile("AI.pdf");

                // PdfImageHelper オブジェクトを作成する
                PdfImageHelper imageHelper = new PdfImageHelper();

                int m = 0;
                // PDF のページを反復処理する
                for (int i = 0; i < pdf.Pages.Count; i++)
                {
                    // 指定されたページを取得する
                    PdfPageBase page = pdf.Pages[i];

                    // ページ上の画像情報を取得する 
                    PdfImageInfo[] imageInfos = imageHelper.GetImagesInfo(page);

                    // 画像情報を反復処理する
                    for (int j = 0; j < imageInfos.Length; j++)
                    {
                        // 特定の指定された画像情報を取得する
                        PdfImageInfo imageInfo = imageInfos[j];

                        // 指定された画像を取得する
                        Image image = imageInfo.Image;

                        // 画像を PNG 形式で保存する
                        image.Save("PDF画像\\img-" + m + ".png");
                        m++;
                    }

                }

                pdf.Dispose();
            }
        }
    }
```
![ExtractPDFimage.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2811193/7587d1e4-a1b5-4903-9107-e767276cf348.png)
* * *

透かしを削除するには、無料トライアルライセンスの申し込みをクリックすることができます：