ไลบรารี C++ ฟรีสำหรับแปลงหน้ PDF เป็นภาพและดึงข้อความ

ไลบรารี C++ แบบโอเพนซอร์สสำหรับการประมวลผล PDF ที่ใช้ในการแปลงหน้ PDF เป็นภาพ, ดึงข้อความ, ทำงานกับ PDF ที่มีการป้องกันด้วยรหัสผ่าน, และเข้าถึงเมตาดาต้าของเอกสารผ่าน API ของ C++

PDFium-Render คืออะไร?

การจัดการและการเรนเดอร์ PDF ภายในแอปพลิเคชัน C++ มักเป็นความท้าทายที่ซับซ้อนในอดีต เนื่องจากต้องพึ่งพาไลเซนส์เชิงพาณิชย์ที่มีราคาแพงหรือเครื่องมือโอเพ่นซอร์สที่ยุ่งยาก ตอนนี้ขอแนะนำ PDFium-Render ไลบรารีห่อหุ้ม C++ แบบ header‑only สมัยใหม่ที่นำพลังของเอนจิน PDFium ของ Google มาสู่โครงการของคุณด้วยอินเทอร์เฟซที่ใช้งานง่ายและสะอาดตา PDFium‑render เป็นการผูกพัน Rust ที่ปลอดภัยและเป็นแบบ idiomatic สำหรับ PDFium ซึ่งเป็นเอนจินการเรนเดอร์ PDF เดียวกันที่ขับเคลื่อน Google Chrome และ Mozilla Firefox สร้างและดูแลโดย ajrcarey ไลบรารีนี้มอบชุดเครื่องมือที่ทรงพลังให้กับนักพัฒนาเพื่อเรนเดอร์หน้าของ PDF เป็นภาพ ดึงข้อความ ปรับโครงสร้าง PDF และเข้าถึงเมตาดาต้าเอกสาร — ทั้งหมดนี้โดยใช้ประโยชน์จากการรับประกันความปลอดภัยของหน่วยความจำของ Rust.

แตกต่างจากไลบรารี PDF จำนวนมากที่มุ่งเน้นเพียงการสร้างหรือการแยกวิเคราะห์พื้นฐานเท่านั้น PDFium-Render โดดเด่นในการเรนเดอร์เนื้อหา PDF ด้วยความแม่นยำระดับพิกเซล ทำให้เหมาะสำหรับแอปพลิเคชันที่ต้องการแสดง, แปลง หรือประมวลผลเอกสาร PDF ที่มีอยู่แล้ว มันรองรับคุณลักษณะพื้นฐานและขั้นสูงหลายอย่างสำหรับการทำงานกับเอกสาร PDF เช่น การเรนเดอร์ไฟล์และหน้าของ PDF, การสกัดและวิเคราะห์ข้อความ, การทำงานกับเมตาดาต้าเอกสาร, การเข้าถึงและจัดการวัตถุในหน้า, การทำงานกับ PDF ที่มีการป้องกันด้วยรหัสผ่าน, และอื่น ๆ อีกมาก หนึ่งในจุดแข็งที่ใหญ่ที่สุดของ pdfium-render คือการสนับสนุนหลายแพลตฟอร์ม ไลบรารีทำงานอย่างราบรื่นบน Windows, macOS, และ Linux โดยซ่อนความแตกต่างของไบนารี PDFium ที่เฉพาะแพลตฟอร์ม ไม่ว่าคุณจะสร้างตัวดูเอกสาร, ทำงานอัตโนมัติของกระบวนการ PDF, หรือสกัดข้อมูลจาก PDF, pdfium-render มีเครื่องมือที่คุณต้องการ

Previous Next

เริ่มต้นใช้งาน PDFium-Render

วิธีที่แนะนำในการติดตั้ง PDFium-Render คือการใช้ CMake โปรดใช้คำสั่งต่อไปนี้เพื่อการติดตั้งที่ราบรื่น

ติดตั้ง PDFium-Render ผ่าน GitHub

 vcpkg install pdfium-render

ติดตั้ง PDFium-Render ผ่าน GitHub

 Git clone https://github.com/ajrcarey/pdfium-render.git 

คุณยังสามารถติดตั้งด้วยตนเองได้; ดาวน์โหลดไฟล์เวอร์ชันล่าสุดโดยตรงจาก GitHub คลัง.

การเรนเดอร์ PDF ความละเอียดสูงด้วย C++

ไลบรารีโอเพ่นซอร์ส PDFium-Render มีจุดแข็งหลักอยู่ที่ความสามารถในการเรนเดอร์. มันสามารถแปลงหน้ PDF เป็นภาพแรสเตอร์ด้วยคุณภาพยอดเยี่ยม รองรับรูปแบบผลลัพธ์หลายประเภทรวมถึง PNG, JPEG และ BMP. เอนจินการเรนเดอร์จัดการคุณลักษณะ PDF ที่ซับซ้อนเช่น ความโปร่งใส, การไล่สี, ฟอนต์ที่ฝังอยู่, และกราฟิกเวกเตอร์ด้วยความแม่นยำเท่าที่คุณคาดหวังจากตัวดู PDF ของ Chrome. ต่อไปนี้เป็นตัวอย่างง่ายที่แสดงว่าผู้พัฒนาซอฟต์แวร์สามารถเรนเดอร์หน้าที่ระบุเป็นรูปแบบภาพ PNG ภายในแอปพลิเคชัน C++ ได้อย่างไร

วิธีการเรนเดอร์หน้ PDF เฉพาะเป็นรูปแบบ PNG ผ่าน C++?

use pdfium_render::prelude::*;

fn render_pdf_page() -> Result<(), PdfiumError> {
    // Initialize PDFium library
    let pdfium = Pdfium::new(
        Pdfium::bind_to_library(Pdfium::pdfium_platform_library_name_at_path("./"))
            .or_else(|_| Pdfium::bind_to_system_library())?
    );
    
    // Load a PDF document
    let document = pdfium.load_pdf_from_file("sample.pdf", None)?;
    
    // Get the first page
    let page = document.pages().get(0)?;
    
    // Render the page to a bitmap at 300 DPI
    let bitmap = page.render_with_config(
        &PdfRenderConfig::new()
            .set_target_width(2480) // 300 DPI for 8.27 inches
            .set_target_height(3508) // 300 DPI for 11.69 inches
    )?;
    
    // Save as PNG
    bitmap.as_image().as_rgba8().unwrap()
        .save("output.png")?;
    
    Ok(())
}

การสกัดข้อความและการวิเคราะห์ผ่านไลบรารี C++

นอกเหนือจากการเรนเดอร์ ไลบรารี PDFium-Render ยังให้ความสามารถในการสกัดข้อความอย่างครบถ้วน. API การสกัดข้อความนั้นใช้งานง่ายและทรงพลัง. ผู้พัฒนาซอฟต์แวร์สามารถสกัดข้อความจากหน้าแต่ละหน้า, ค้นหาสตริงเฉพาะ, และแม้กระทั่งเข้าถึงข้อมูลตำแหน่งระดับอักขระด้วยเพียงไม่กี่บรรทัดของโค้ด — ซึ่งสำคัญสำหรับการทำฟีเจอร์เช่นการเลือกข้อความหรือการไฮไลท์. ตัวอย่างต่อไปนี้แสดงว่าผู้พัฒนาซอฟต์แวร์สามารถสกัดข้อความจากพื้นที่เฉพาะของหน้ PDF ภายในแอปพลิเคชัน C++ ได้อย่างไร

วิธีดึงข้อความจากส่วนเฉพาะของหน้า PDF ผ่าน C++ API?

use pdfium_render::prelude::*;

fn extract_text_from_page() -> Result<(), PdfiumError> {
    let pdfium = Pdfium::new(
        Pdfium::bind_to_library(Pdfium::pdfium_platform_library_name_at_path("./"))
            .or_else(|_| Pdfium::bind_to_system_library())?
    );
    
    let document = pdfium.load_pdf_from_file("document.pdf", None)?;
    let page = document.pages().get(0)?;
    
    // Extract all text from the page
    let text = page.text()?;
    let all_text = text.all();
    println!("Page text: {}", all_text);
    
    // Search for specific text
    let search_results = text.search("important", true, false)?;
    for result in search_results {
        println!("Found at index: {}", result.start_index());
    }
    
    // Get text in a specific rectangular area
    let rect = PdfRect::new(100.0, 100.0, 300.0, 200.0);
    let bounded_text = text.bounded(rect)?;
    println!("Text in region: {}", bounded_text);
    
    Ok(())
}

 

การทำงานกับ PDF ที่มีการป้องกันด้วยรหัสผ่านด้วย C++

ความปลอดภัยเป็นสิ่งสำคัญอย่างยิ่งเมื่อทำงานกับเอกสาร PDFium-Render จัดการไฟล์ PDF ที่มีการป้องกันด้วยรหัสผ่านได้อย่างราบรื่น รองรับทั้งรหัสผ่านผู้ใช้และรหัสผ่านเจ้าของ ไลบรารีจัดการการตรวจสอบสิทธิ์อย่างโปร่งใส และส่งคืนข้อผิดพลาดที่เหมาะสมหากรหัสผ่านไม่ถูกต้องหรือหาก PDF มีข้อจำกัดที่ป้องกันการดำเนินการบางอย่าง นี่คือตัวอย่างที่มีประโยชน์มากซึ่งแสดงวิธีจัดการเอกสาร PDF ที่ป้องกันด้วยรหัสผ่านในแอปพลิเคชัน C++

วิธีเปิดและโหลดเอกสาร PDF ที่ป้องกันด้วยรหัสผ่านผ่าน C++ API?

fn open_encrypted_pdf() -> Result<(), PdfiumError> {
    let pdfium = Pdfium::new(
        Pdfium::bind_to_library(Pdfium::pdfium_platform_library_name_at_path("./"))
            .or_else(|_| Pdfium::bind_to_system_library())?
    );
    
    // Attempt to load with password
    let document = pdfium.load_pdf_from_file(
        "confidential.pdf", 
        Some("secret_password")
    )?;
    
    println!("Successfully opened encrypted PDF");
    println!("Pages: {}", document.pages().len());
    
    Ok(())
}

การทำงานกับเมตาดาต้าและคุณสมบัติของ PDF ด้วย C++

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

วิธีทำงานกับเมตาดาต้าเอกสาร PDF ผ่าน C++ API?

fn inspect_document_metadata() -> Result<(), PdfiumError> {
    let pdfium = Pdfium::new(
        Pdfium::bind_to_library(Pdfium::pdfium_platform_library_name_at_path("./"))
            .or_else(|_| Pdfium::bind_to_system_library())?
    );
    
    let document = pdfium.load_pdf_from_file("report.pdf", None)?;
    
    // Access document metadata
    let metadata = document.metadata();
    println!("Title: {}", metadata.title().unwrap_or("Untitled"));
    println!("Author: {}", metadata.author().unwrap_or("Unknown"));
    println!("Creator: {}", metadata.creator().unwrap_or("Unknown"));
    println!("Producer: {}", metadata.producer().unwrap_or("Unknown"));
    
    // Get page count
    let page_count = document.pages().len();
    println!("Total pages: {}", page_count);
    
    // Inspect individual page properties
    for (index, page) in document.pages().iter().enumerate() {
        let width = page.width();
        let height = page.height();
        println!("Page {}: {}x{} points", index + 1, width.value, height.value);
    }
    
    Ok(())
}
 ไทย