PDF 문서에서 이미지를 추출하는 것은 문서‑처리 파이프라인을 구축할 때, 특히 썸네일을 생성하거나 그래픽을 다른 곳에서 재사용하려는 경우 자주 요구되는 작업입니다. GroupDocs.Parser Cloud SDK for .NET은 이 작업을 C#에서 간단하게 수행할 수 있는 강력한 API를 제공합니다. 이 가이드에서는 PDF를 업로드하고, 모든 포함된 이미지를 가져와 로컬에 저장하며, 필요에 따라 원격 파일을 정리하는 방법을 전체 코드와 REST 예제와 함께 배웁니다.

C#에서 PDF 문서의 이미지를 추출하는 단계

  1. GroupDocs Cloud 스토리지에 PDF 업로드: 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 reference를 참조하세요.

  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. (Optional) 원격 PDF 정리: 추출 후에 저장소를 깔끔하게 유지하기 위해 업로드된 파일을 삭제할 수 있습니다.
var deleteRequest = new DeleteFileRequest(remotePdfPath);
storageApi.DeleteFile(deleteRequest);

이 단계는 정리 오류를 무시하기 위해 try‑catch 블록으로 감싸져 있습니다.

  1. 출력 검토: 콘솔에 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 워크플로우입니다.

  1. 액세스 토큰을 얻습니다 (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이 포함됩니다.

  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. NuGet을 사용하여 .NET 클라이언트 라이브러리를 설치합니다:
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에 추가하여 추출을 제한합니다.
  • 이미지 품질 설정: 출력이 compressed가 필요하면 imageQuality 매개변수(0‑100)를 사용합니다.
  • 형식별 필터링: 선택한 형식만 받으려면 fileExtensions = ["png","jpeg"]를 제공하십시오.

이 옵션은 API 참조에 문서화되어 있습니다.

결론

PDF 문서에서 이미지를 추출하는 작업을 C#에서 수행할 때, 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는 크기 조정 없이 원본 이미지 데이터를 반환합니다. 더 작은 파일이 필요하면, 저장된 이미지를 이미지 처리 라이브러리를 사용해 후처리하십시오.

Read More