Извлечение изображений из документов PDF часто требуется при построении конвейеров обработки документов, особенно для создания миниатюр или повторного использования графики в других местах. GroupDocs.Parser Cloud SDK for .NET предоставляет мощный API, который упрощает эту задачу в C#. В этом руководстве вы узнаете, как загрузить PDF, получить все встроенные изображения, сохранить их локально и при необходимости удалить удалённый файл, с полным примером кода и REST‑запросами.
Шаги по извлечению изображений из PDF‑документов на C#
- Загрузить PDF в хранилище GroupDocs Cloud: Используйте
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 для получения полной информации.
- Декодировать и сохранить каждое изображение: Пройдите по
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 для проверки.
- (Опционально) Очистка удалённого PDF: После извлечения вы можете удалить загруженный файл, чтобы поддерживать порядок в хранилище.
var deleteRequest = new DeleteFileRequest(remotePdfPath);
storageApi.DeleteFile(deleteRequest);
Этот шаг обёрнут в блок try‑catch, чтобы игнорировать любые ошибки очистки.
- Просмотр вывода: Консоль отобразит сводку вроде
Total images extracted: 12, подтверждая успешное извлечение.
Полный пример кода: извлечение изображений из PDF‑документов с помощью GroupDocs.Parser
Следующий пример демонстрирует полный рабочий процесс, описанный выше. Он включает конфигурацию, загрузку, извлечение изображений, сохранение и необязательную очистку.
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
}
}
}
}
}
Примечание: Этот пример кода демонстрирует базовый функционал. Прежде чем использовать его в вашем проекте, убедитесь, что обновили все пути к файлам и значения конфигурации в соответствии с вашей реальной средой, проверьте, что все необходимые зависимости правильно установлены, и тщательно протестируйте в вашей среде разработки. Если вы столкнётесь с какими‑либо проблемами, обратитесь к официальной документации или свяжитесь с командой поддержки для получения помощи.
Извлечение изображений через REST API с помощью cURL
Тот же процесс можно выполнить с помощью прямых REST‑вызовов. Ниже приведён минимальный рабочий процесс cURL.
- Получить токен доступа (OAuth 2.0 client credentials grant).
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.
Подготовка среды
- Установите клиентскую библиотеку .NET через NuGet:
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, снижая нагрузку на память вашего приложения.
Настройка параметров извлечения изображений
Хотя базовый пример работает сразу, вы можете тонко настроить запрос:
- Укажите диапазон страниц: Добавьте
pages = "1-5"кGetDocumentImagesRequest, чтобы ограничить извлечение. - Установите качество изображения: Используйте параметр
imageQuality(0‑100), если вам нужен сжатый вывод. - Фильтрация по формату: Укажите
fileExtensions = ["png","jpeg"], чтобы получить только выбранные форматы.
Эти параметры задокументированы в справочнике API.
Заключение
Извлечение изображений из PDF‑документов в C# становится простым и надёжным процессом, когда вы используете GroupDocs.Parser Cloud SDK for .NET. SDK обрабатывает загрузку, разбор и конвертацию в Base64, позволяя вам сосредоточиться на сохранении файлов и их интеграции в ваш рабочий процесс. Не забудьте защитить учётные данные клиента, соблюдать условия лицензирования и рассмотреть возможность получения временной лицензии для оценки на странице временной лицензии. С предоставленными примерами кода и REST‑запросов вы готовы добавить надёжное извлечение изображений из PDF в любое приложение .NET.
Часто задаваемые вопросы
Как извлечь изображения из PDF‑документов с помощью C#?
Используйте метод GetDocumentImages API Parser после загрузки PDF с помощью StorageApi.UploadFile. Декодируйте возвращённые строки Base64 и запишите их на диск, как показано в примере кода.
Что делать, если PDF защищён паролем?
Укажите пароль в модели запроса. SDK расшифрует файл перед извлечением изображений. Смотрите документацию для точного названия свойства.
Могу ли я ограничить извлечение определёнными страницами?
Да, установите свойство pages в GetDocumentImagesRequest в список, разделённый запятыми, или диапазон (например, "1-3,5"). API вернёт изображения только с этих страниц.
Есть ли ограничения по размеру для извлечённых изображений?
SDK возвращает оригинальные данные изображения без изменения размера. Если вам нужны более мелкие файлы, выполните пост‑обработку сохранённых изображений с помощью любой библиотеки обработки изображений.
