ไลบรารี 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 มีเครื่องมือที่คุณต้องการ
เริ่มต้นใช้งาน 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(())
}