Извлечение изображений из документов PDF часто требуется при построении конвейеров обработки документов, особенно для создания миниатюр или повторного использования графики в других местах. GroupDocs.Parser Cloud SDK for .NET предоставляет мощный API, который упрощает эту задачу в C#. В этом руководстве вы узнаете, как загрузить PDF, получить все встроенные изображения, сохранить их локально и при необходимости удалить удалённый файл, с полным примером кода и REST‑запросами.

Шаги по извлечению изображений из PDF‑документов на C#

  1. Загрузить PDF в хранилище GroupDocs Cloud: Используйте StorageApi.UploadFile для размещения исходного PDF в облаке.
var uploadRequest = new UploadFileRequest(remotePdfPath, File.ReadAllBytes(localPdfPath));
storageApi.UploadFile(uploadRequest);

Этот вызов гарантирует, что файл доступен для разбора.

  1. Запрос изображений документа: Вызовите ParserApi.GetDocumentImages с GetDocumentImagesRequest.
var imagesRequest = new GetDocumentImagesRequest(remotePdfPath);
ImagesResult imagesResult = parserApi.GetDocumentImages(imagesRequest);

Ответ содержит коллекцию объектов ImageInfo, каждый из которых хранит данные Base64 и метаданные. См. Справочник API для получения полной информации.

  1. Декодировать и сохранить каждое изображение: Пройдите по 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 для проверки.

  1. (Опционально) Очистка удалённого PDF: После извлечения вы можете удалить загруженный файл, чтобы поддерживать порядок в хранилище.
var deleteRequest = new DeleteFileRequest(remotePdfPath);
storageApi.DeleteFile(deleteRequest);

Этот шаг обёрнут в блок try‑catch, чтобы игнорировать любые ошибки очистки.

  1. Просмотр вывода: Консоль отобразит сводку вроде 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.

  1. Получить токен доступа (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.

  1. Загрузите 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"
  1. Запрос изображений для загруженного документа.
curl -X GET "https://api.groupdocs.cloud/v2.0/parser/input.pdf/images" \
     -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Ответ в формате JSON содержит массив изображений с base64Data, fileExtension, pageNumber и т.д.

  1. Сохраните каждое изображение локально (пример с использованием 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.

Подготовка среды

  1. Установите клиентскую библиотеку .NET через NuGet:
dotnet add package GroupDocs.Parser-Cloud

Пакет доступен на официальной странице загрузки.

  1. Убедитесь, что у вас установлен .NET 6.0 или более новая версия, а также есть действующая учетная запись GroupDocs Cloud с клиентскими учетными данными.

  2. (Опционально) Клонировать репозиторий примера для справки:

    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 возвращает оригинальные данные изображения без изменения размера. Если вам нужны более мелкие файлы, выполните пост‑обработку сохранённых изображений с помощью любой библиотеки обработки изображений.

Читать далее