การดึงภาพจากเอกสาร PDF เป็นความต้องการที่พบบ่อยเมื่อต้องสร้าง pipeline การประมวลผลเอกสาร โดยเฉพาะสำหรับการสร้าง thumbnail หรือการนำกราฟิกไปใช้ใหม่ในที่อื่น ๆ GroupDocs.Parser Cloud SDK for .NET มี API ที่ทรงพลังซึ่งทำให้งานนี้ทำได้อย่างง่ายดายใน C#. ในคู่มือนี้คุณจะได้เรียนรู้วิธีอัปโหลด PDF, ดึงภาพที่ฝังอยู่ทั้งหมด, บันทึกลงในเครื่อง, และถ้าต้องการก็ทำความสะอาดไฟล์ระยะไกล, พร้อมตัวอย่างโค้ดเต็มและ REST examples.

ขั้นตอนการดึงรูปภาพจากเอกสาร 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. (Optional) ทำความสะอาด 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

สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับ endpoint และพารามิเตอร์ โปรดดู เอกสาร API อย่างเป็นทางการ.

เตรียมสภาพแวดล้อมให้พร้อม

  1. Install the .NET client library via NuGet:
dotnet add package GroupDocs.Parser-Cloud

The package is available from the official หน้าดาวน์โหลด.

  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) หากคุณต้องการผลลัพธ์ที่ compressed .
  • กรองตามรูปแบบ: ระบุ fileExtensions = ["png","jpeg"] เพื่อรับเฉพาะรูปแบบที่เลือก.

ตัวเลือกเหล่านี้ได้รับการบันทึกไว้ใน เอกสารอ้างอิง API.

สรุป

การดึงรูปภาพจากเอกสาร PDF ใน C# กลายเป็นกระบวนการที่ง่ายและเชื่อถือได้เมื่อคุณใช้ GroupDocs.Parser Cloud SDK for .NET. SDK จัดการการอัปโหลด, การแยกวิเคราะห์และการแปลงเป็น Base64, ทำให้คุณสามารถมุ่งเน้นที่การบันทึกไฟล์และการรวมเข้ากับกระบวนการทำงานของคุณ. อย่าลืมรักษาข้อมูลประจำตัวของลูกค้าให้ปลอดภัย, ปฏิบัติตามเงื่อนไขการใช้งาน, และพิจารณาใช้ใบอนุญาตชั่วคราวสำหรับการประเมินผลที่ หน้าใบอนุญาตชั่วคราว. ด้วยโค้ดและตัวอย่าง REST ที่ให้มา, คุณพร้อมที่จะเพิ่มการดึงรูปภาพ PDF ที่แข็งแรงให้กับแอปพลิเคชัน .NET ใด ๆ

คำถามที่พบบ่อย

ฉันจะดึงรูปภาพจากเอกสาร PDF โดยใช้ C# อย่างไร?
ใช้เมธอด GetDocumentImages ของ Parser API หลังจากอัปโหลด PDF ด้วย StorageApi.UploadFile ดึงสตริง Base64 ที่คืนมาและเขียนลงดิสก์ตามตัวอย่างโค้ดที่แสดง

ถ้า PDF ถูกป้องกันด้วยรหัสผ่านจะทำอย่างไร?
รวมรหัสผ่านไว้ในโมเดลคำขอ SDK จะถอดรหัสไฟล์ก่อนการดึงภาพ ดูที่ เอกสาร เพื่อดูชื่อคุณสมบัติที่แน่นอน.

ฉันสามารถจำกัดการสกัดเฉพาะหน้าที่ต้องการได้หรือไม่?
ใช่, ตั้งค่าคุณสมบัติ pages บน GetDocumentImagesRequest เป็นรายการคั่นด้วยเครื่องหมายคอมม่า หรือช่วง (เช่น "1-3,5"). API จะส่งคืนภาพเฉพาะจากหน้าที่ระบุเท่านั้น.

มีขนาดจำกัดสำหรับภาพที่แยกออกหรือไม่?
SDK จะคืนค่าข้อมูลภาพต้นฉบับโดยไม่ปรับขนาด หากคุณต้องการไฟล์ขนาดเล็กลง ให้ทำการประมวลผลต่อภาพที่บันทึกไว้โดยใช้ไลบรารีการประมวลผลภาพใดก็ได้

อ่านต่อ