PDF ドキュメントから画像を抽出することは、ドキュメント処理パイプラインを構築する際に頻繁に求められる要件であり、特にサムネイルの生成や画像の再利用などで重要です。GroupDocs.Parser Cloud SDK for .NET は、このタスクを C# で簡単に実行できる強力な API を提供します。このガイドでは、PDF をアップロードし、埋め込まれたすべての画像を取得し、ローカルに保存し、必要に応じてリモートファイルをクリーンアップする方法を、完全なコードと REST の例とともに学びます。
C# で PDF ドキュメントから画像を抽出する手順
- GroupDocs Cloud ストレージに PDF をアップロード:
StorageApi.UploadFileを使用して、ソース PDF をクラウドに配置します。
var uploadRequest = new UploadFileRequest(remotePdfPath, File.ReadAllBytes(localPdfPath));
storageApi.UploadFile(uploadRequest);
この呼び出しにより、ファイルが解析できるようにアクセス可能になります。
- ドキュメント画像のリクエスト:
ParserApi.GetDocumentImagesをGetDocumentImagesRequestと共に呼び出します。
var imagesRequest = new GetDocumentImagesRequest(remotePdfPath);
ImagesResult imagesResult = parserApi.GetDocumentImages(imagesRequest);
レスポンスには ImageInfo オブジェクトのコレクションが含まれ、各オブジェクトは Base64 データとメタデータを保持します。詳細は API reference を参照してください。
- 各画像をデコードして保存する:
imagesResult.Imagesを反復処理し、Base64 文字列をバイト配列に変換し、ディスクにファイルを書き込みます。
foreach (ImageInfo imgInfo in imagesResult.Images)
{
byte[] imageBytes = Convert.FromBase64String(imgInfo.Base64Data);
string extension = imgInfo.FileExtension?.TrimStart('.').ToLower() ?? "bin";
string fileName = $"extracted_page{imgInfo.PageNumber}_img{imgInfo.ImageIndex}_{imageCounter}.{extension}";
File.WriteAllBytes(fileName, imageBytes);
}
コンソールは保存されたファイル名、寸法、および DPI をログに出力し、検証します。
- (Optional) リモートPDFのクリーンアップ: 抽出後、アップロードされたファイルを削除してストレージを整理できます。
var deleteRequest = new DeleteFileRequest(remotePdfPath);
storageApi.DeleteFile(deleteRequest);
このステップは try‑catch ブロックでラップされ、クリーンアップエラーを無視します。
- 出力の確認: コンソールに
Total images extracted: 12のようなサマリーが表示され、抽出が成功したことが確認できます。
完全なコード例: GroupDocs.Parser を使用した PDF ドキュメントから画像を抽出
以下の例は、上記で説明したフルワークフローを示しています。構成、アップロード、画像抽出、保存、およびオプションのクリーンアップが含まれます。
using System;
using System.IO;
using System.Collections.Generic;
using GroupDocs.Parser.Cloud.Sdk.Api;
using GroupDocs.Parser.Cloud.Sdk.Client;
using GroupDocs.Parser.Cloud.Sdk.Model;
using GroupDocs.Parser.Cloud.Sdk.Model.Requests;
namespace ExtractImagesFromPdf
{
class Program
{
static void Main(string[] args)
{
// Configuration – replace with your actual credentials
var config = new Configuration
{
ClientId = "YOUR_CLIENT_ID",
ClientSecret = "YOUR_CLIENT_SECRET"
};
// APIs
var storageApi = new StorageApi(config);
var parserApi = new ParserApi(config);
// Input PDF path (local) and remote name in storage
const string localPdfPath = "input.pdf";
const string remotePdfPath = "input.pdf";
try
{
// -------------------------------------------------
// 1. Upload PDF to GroupDocs Cloud storage (if not already there)
// -------------------------------------------------
if (!File.Exists(localPdfPath))
throw new FileNotFoundException($"Local file not found: {localPdfPath}");
var uploadRequest = new UploadFileRequest(remotePdfPath, File.ReadAllBytes(localPdfPath));
storageApi.UploadFile(uploadRequest);
// -------------------------------------------------
// 2. Retrieve document images (all pages)
// -------------------------------------------------
var imagesRequest = new GetDocumentImagesRequest(remotePdfPath);
ImagesResult imagesResult = parserApi.GetDocumentImages(imagesRequest);
// -------------------------------------------------
// 3. Save each extracted image to disk
// -------------------------------------------------
int imageCounter = 0;
foreach (ImageInfo imgInfo in imagesResult.Images)
{
// Image data is returned as Base64 string
byte[] imageBytes = Convert.FromBase64String(imgInfo.Base64Data);
// Build a descriptive file name
string extension = imgInfo.FileExtension?.TrimStart('.').ToLower() ?? "bin";
string fileName = $"extracted_page{imgInfo.PageNumber}_img{imgInfo.ImageIndex}_{imageCounter}.{extension}";
File.WriteAllBytes(fileName, imageBytes);
Console.WriteLine($"Saved: {fileName} ({imgInfo.Width}x{imgInfo.Height} px, {imgInfo.Resolution} DPI)");
imageCounter++;
}
Console.WriteLine($"Total images extracted: {imageCounter}");
}
catch (ApiException apiEx)
{
Console.Error.WriteLine($"GroupDocs API error: {apiEx.ErrorCode} - {apiEx.Message}");
}
catch (Exception ex)
{
Console.Error.WriteLine($"Unexpected error: {ex.Message}");
}
finally
{
// -------------------------------------------------
// 4. Optional cleanup – delete the uploaded PDF from storage
// -------------------------------------------------
try
{
var deleteRequest = new DeleteFileRequest(remotePdfPath);
storageApi.DeleteFile(deleteRequest);
}
catch
{
// Ignored – cleanup is optional
}
}
}
}
}
注意: このコード例はコア機能を示しています。プロジェクトで使用する前に、ファイルパスや構成値を実際の環境に合わせて更新し、すべての必須依存関係が正しくインストールされていることを確認し、開発環境で徹底的にテストしてください。問題が発生した場合は、公式ドキュメント または サポートチーム にお問い合わせください。
cURL を使用した REST API で画像を抽出
同じ操作は直接の REST 呼び出しで実行できます。以下は最小限の cURL ワークフローです。
- アクセストークンを取得する (OAuth 2.0 クライアント資格情報グラント)。
curl -X POST "https://api.groupdocs.cloud/v2.0/oauth2/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET"
レスポンスには access_token が含まれます。
- PDF をアップロード してクラウドストレージへ。
curl -X PUT "https://api.groupdocs.cloud/v2.0/storage/file/input.pdf" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/pdf" \
--data-binary "@input.pdf"
- 画像をリクエスト(アップロードされたドキュメント用)。
curl -X GET "https://api.groupdocs.cloud/v2.0/parser/input.pdf/images" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
JSON レスポンスには、base64Data、fileExtension、pageNumber などを含む画像の配列が含まれます。
- 各画像をローカルに保存 (
jqとbase64を使用した例)。
curl -X GET "https://api.groupdocs.cloud/v2.0/parser/input.pdf/images" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" | \
jq -r '.images[] | "\(.pageNumber)_\(.imageIndex).\(.fileExtension) \(.base64Data)"' | \
while read filename b64; do
echo "$b64" | base64 -d > "$filename"
done
エンドポイントとパラメータの詳細については、公式 API ドキュメントをご覧ください。
環境の準備
- NuGet を使用して .NET クライアント ライブラリをインストールします:
dotnet add package GroupDocs.Parser-Cloud
パッケージは公式のダウンロード ページから入手できます。
.NET 6.0 以降がインストールされており、クライアント認証情報を持つ有効な GroupDocs Cloud アカウントがあることを確認してください。
(オプション)サンプルリポジトリをクローンして参照します:
git clone https://github.com/groupdocs-parser-cloud/groupdocs-parser-cloud-dotnet.git
GroupDocs.Parser が画像抽出に適している理由
- 直接画像取得:
GetDocumentImages呼び出しは、追加の変換ステップなしで画像を元の形式で返します。 - Base64 配信: 画像は Base64 文字列として提供され、任意の言語で簡単にデコードできます。
- ページレベルのメタデータ: 各
ImageInfoにはページ番号、寸法、解像度、インデックスが含まれ、抽出されたアセットの整理に役立ちます。 - すべての一般的なラスタ形式のサポート: PNG, JPEG, BMP, GIF, TIFF などが PDF に保存されたまま正確に保持されます。
- スケーラブルなクラウド処理: 大きな PDF は GroupDocs サーバーで処理され、アプリケーションのメモリ負荷が軽減されます。
画像抽出オプションの設定
基本的な例はすぐに動作しますが、リクエストを微調整できます:
- ページ範囲を指定:
GetDocumentImagesRequestにpages = "1-5"を追加して抽出を制限します。 - 画像品質を設定: 圧縮 出力が必要な場合は
imageQualityパラメーター (0‑100) を使用します。 - 形式でフィルタ:
fileExtensions = ["png","jpeg"]を指定して、選択した形式のみを受け取ります。
これらのオプションは、API リファレンスに記載されています。
結論
C# で PDF ドキュメントから画像を抽出することは、GroupDocs.Parser Cloud SDK for .NET を活用すれば、シンプルで信頼性の高いプロセスになります。SDK はアップロード、解析、Base64 変換を処理し、ファイルの保存やワークフローへの統合に集中できるようにします。クライアント認証情報を安全に保管し、ライセンス条件を遵守し、評価用に一時ライセンスページで一時ライセンスの使用を検討してください。提供されたコードと REST の例を使用すれば、任意の .NET アプリケーションに堅牢な PDF 画像抽出機能を追加できます。
FAQs
C# を使用して PDF ドキュメントから画像を抽出するにはどうすればよいですか?StorageApi.UploadFile で PDF をアップロードした後、Parser API の GetDocumentImages メソッドを使用します。返された Base64 文字列をデコードし、コード例に示すようにディスクに書き込みます。
PDFがパスワードで保護されている場合はどうすればよいですか?
リクエストモデルにパスワードを含めます。SDKは画像を抽出する前にファイルを復号化します。正確なプロパティ名については、ドキュメント を参照してください。
特定のページに抽出を限定できますか?
はい、GetDocumentImagesRequest の pages プロパティをカンマ区切りのリストまたは範囲(例: "1-3,5")に設定します。API はそれらのページからのみ画像を返します。
抽出された画像にサイズ制限はありますか?
SDKはリサイズせずに元の画像データを返します。サイズの小さいファイルが必要な場合は、任意の画像処理ライブラリを使用して保存された画像を後処理してください。
