Wyodrębnianie obrazów z dokumentów PDF jest częstym wymogiem przy budowaniu potoków przetwarzania dokumentów, szczególnie przy generowaniu miniatur lub ponownym wykorzystaniu grafiki w innym miejscu. GroupDocs.Parser Cloud SDK for .NET zapewnia potężne API, które upraszcza to zadanie w C#. W tym przewodniku dowiesz się, jak przesłać plik PDF, pobrać wszystkie osadzone obrazy, zapisać je lokalnie oraz opcjonalnie usunąć zdalny plik, wraz z pełnym kodem i przykładami REST.

Kroki do wyodrębniania obrazów z dokumentów PDF w C#

  1. Prześlij PDF do przechowalni GroupDocs Cloud: Użyj StorageApi.UploadFile, aby umieścić źródłowy plik PDF w chmurze.
var uploadRequest = new UploadFileRequest(remotePdfPath, File.ReadAllBytes(localPdfPath));
storageApi.UploadFile(uploadRequest);

To wywołanie zapewnia, że plik jest dostępny do parsowania.

  1. Żądanie obrazów dokumentu: Wywołaj ParserApi.GetDocumentImages z GetDocumentImagesRequest.
var imagesRequest = new GetDocumentImagesRequest(remotePdfPath);
ImagesResult imagesResult = parserApi.GetDocumentImages(imagesRequest);

Odpowiedź zawiera kolekcję obiektów ImageInfo, z których każdy przechowuje dane w formacie Base64 oraz metadane. Zobacz referencję API po pełne szczegóły.

  1. Dekoduj i zapisz każdy obraz: Przejdź przez imagesResult.Images, skonwertuj ciąg Base64 na tablicę bajtów i zapisz plik na dysku.
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);
}

Konsola loguje nazwę zapisanego pliku, wymiary oraz DPI w celu weryfikacji.

  1. (Opcjonalnie) Usuń zdalny PDF: Po wyodrębnieniu możesz usunąć przesłany plik, aby utrzymać porządek w magazynie.
var deleteRequest = new DeleteFileRequest(remotePdfPath);
storageApi.DeleteFile(deleteRequest);

Ten krok jest opakowany w blok try‑catch, aby zignorować ewentualne błędy czyszczenia.

  1. Przejrzyj wynik: Konsola wyświetli podsumowanie, takie jak Total images extracted: 12, potwierdzając pomyślne wyodrębnienie.

Pełny przykład kodu: wyodrębnianie obrazów z dokumentów PDF przy użyciu GroupDocs.Parser

Poniższy przykład demonstruje pełny przepływ pracy opisany powyżej. Zawiera konfigurację, przesyłanie, wyodrębnianie obrazów, zapisywanie oraz opcjonalne czyszczenie.

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
                }
            }
        }
    }
}

Uwaga: Ten przykład kodu demonstruje podstawową funkcjonalność. Przed użyciem w swoim projekcie upewnij się, że zaktualizowałeś wszystkie ścieżki plików i wartości konfiguracyjne, aby odpowiadały rzeczywistemu środowisku, sprawdź, czy wszystkie wymagane zależności są poprawnie zainstalowane, oraz dokładnie przetestuj w środowisku deweloperskim. Jeśli napotkasz jakiekolwiek problemy, odwołaj się do oficjalnej dokumentacji lub skontaktuj się z zespołem wsparcia w celu uzyskania pomocy.

Pobieranie obrazów za pomocą REST API przy użyciu cURL

To samo działanie można wykonać za pomocą bezpośrednich wywołań REST. Poniżej znajduje się minimalny przepływ pracy cURL.

  1. Uzyskaj token dostępu (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"

Odpowiedź zawiera access_token.

  1. Prześlij PDF do magazynu w chmurze.
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. Żądaj obrazów dla przesłanego dokumentu.
curl -X GET "https://api.groupdocs.cloud/v2.0/parser/input.pdf/images" \
     -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Odpowiedź w formacie JSON zawiera tablicę obrazów z polami base64Data, fileExtension, pageNumber itp.

  1. Zapisz każdy obraz lokalnie (przykład użycia jq i 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

Aby uzyskać więcej informacji o punktach końcowych i parametrach, zobacz oficjalną dokumentację API.

Przygotowanie środowiska

  1. Zainstaluj bibliotekę kliencką .NET za pomocą NuGet:
dotnet add package GroupDocs.Parser-Cloud

Pakiet jest dostępny na oficjalnej stronie pobierania.

  1. Upewnij się, że masz zainstalowane .NET 6.0 lub nowszy oraz ważne konto GroupDocs Cloud z danymi uwierzytelniającymi klienta.

  2. (Opcjonalnie) Sklonuj przykładowe repozytorium w celu odniesienia:

git clone https://github.com/groupdocs-parser-cloud/groupdocs-parser-cloud-dotnet.git

Co sprawia, że GroupDocs.Parser jest odpowiedni do wyodrębniania obrazów

  • Bezpośrednie pobieranie obrazów: Wywołanie GetDocumentImages zwraca obrazy w ich oryginalnym formacie bez dodatkowych kroków konwersji.
  • Dostawa w formacie Base64: Obrazy są dostarczane jako ciągi Base64, co ułatwia ich dekodowanie w dowolnym języku.
  • Metadane na poziomie strony: Każdy ImageInfo zawiera numer strony, wymiary, rozdzielczość i indeks, co pomaga w organizacji wyodrębnionych zasobów.
  • Obsługa wszystkich popularnych formatów rastrowych: PNG, JPEG, BMP, GIF, TIFF i inne są zachowywane dokładnie tak, jak są zapisane w pliku PDF.
  • Skalowalne przetwarzanie w chmurze: Duże pliki PDF są przetwarzane na serwerach GroupDocs, co zmniejsza obciążenie pamięci w Twojej aplikacji.

Konfigurowanie opcji wyodrębniania obrazów

Chociaż podstawowy przykład działa od razu, możesz dostroić żądanie:

  • Określ zakres stron: Dodaj pages = "1-5" do GetDocumentImagesRequest, aby ograniczyć ekstrakcję.
  • Ustaw jakość obrazu: Użyj parametru imageQuality (0‑100), jeśli potrzebujesz skompresowanego wyjścia.
  • Filtruj według formatu: Podaj fileExtensions = ["png","jpeg"], aby otrzymać tylko wybrane formaty.

Te opcje są udokumentowane w referencji API.

Podsumowanie

Wyodrębnianie obrazów z dokumentów PDF w C# staje się prostym i niezawodnym procesem, gdy korzystasz z GroupDocs.Parser Cloud SDK for .NET. SDK obsługuje przesyłanie, parsowanie i konwersję do Base64, pozwalając skupić się na zapisywaniu plików i integracji ich w przepływie pracy. Pamiętaj, aby zabezpieczyć swoje dane uwierzytelniające klienta, przestrzegać warunków licencji oraz rozważyć tymczasową licencję do oceny na strona tymczasowej licencji. Dzięki dostarczonemu kodowi i przykładom REST, jesteś gotowy dodać solidne wyodrębnianie obrazów PDF do dowolnej aplikacji .NET.

Najczęściej zadawane pytania

Jak wyodrębnić obrazy z dokumentów PDF przy użyciu C#?
Użyj metody GetDocumentImages interfejsu Parser API po przesłaniu pliku PDF za pomocą StorageApi.UploadFile. Zdekoduj zwrócone ciągi Base64 i zapisz je na dysku, jak pokazano w przykładzie kodu.

Co jeśli PDF jest zabezpieczony hasłem?
Dołącz hasło w modelu żądania. SDK odszyfruje plik przed wyodrębnieniem obrazów. Zobacz dokumentację aby poznać dokładną nazwę właściwości.

Czy mogę ograniczyć wyodrębnianie do określonych stron?
Tak, ustaw właściwość pages w GetDocumentImagesRequest na listę rozdzieloną przecinkami lub zakres (np. "1-3,5"). API zwróci obrazy tylko z tych stron.

Czy istnieją limity rozmiaru dla wyodrębnionych obrazów?
SDK zwraca oryginalne dane obrazu bez zmiany rozmiaru. Jeśli potrzebujesz mniejszych plików, przetwórz zapisane obrazy przy użyciu dowolnej biblioteki do przetwarzania obrazów.

Read More