Витягування зображень з документів PDF часто потрібне при створенні конвеєрів обробки документів, особливо для створення мініатюр або повторного використання графіки в інших місцях. GroupDocs.Parser Cloud SDK for .NET надає потужний API, який робить це завдання простим у C#. У цьому посібнику ви дізнаєтеся, як завантажити PDF, отримати всі вбудовані зображення, зберегти їх локально та, за потреби, очистити віддалений файл, з повним кодом та прикладами REST.

Кроки з вилучення зображень з PDF‑документів у C#

  1. Завантажити PDF у GroupDocs Cloud storage: Використовуйте 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
                }
            }
        }
    }
}

Note: Цей приклад коду демонструє основну функціональність. Перш ніж використовувати його у вашому проєкті, переконайтеся, що оновили всі шляхи до файлів та значення конфігурації відповідно до вашого реального середовища, перевірте, що всі необхідні залежності правильно встановлені, і ретельно протестуйте у вашому середовищі розробки. Якщо ви зіткнетеся з будь-якими проблемами, будь ласка, зверніться до офіційної документації або зв’яжіться з командою підтримки для отримання допомоги.

Витягування зображень через 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 повертає оригінальні дані зображення без зміни розміру. Якщо вам потрібні менші файли, пост‑обробіть збережені зображення за допомогою будь‑якої бібліотеки обробки зображень.

Read More