Perpustakaan C++ Percuma untuk Merender Halaman PDF ke Imej & Mengekstrak Teks.
Perpustakaan Pemprosesan PDF C++ Sumber Terbuka untuk Merender Halaman PDF ke Imej, Mengekstrak Teks, Bekerja dengan PDF yang Dilindungi Kata Laluan, dan Mengakses Metadata Dokumen melalui API C++.
Apakah PDFium-Render?
Pengendalian dan rendering PDF dalam aplikasi C++ secara historis merupakan cabaran yang kompleks, selalunya melibatkan lesen komersial yang mahal atau alat sumber terbuka yang rumit. Memperkenalkan PDFium-Render, sebuah perpustakaan pembungkus C++ moden, header-only yang membawa kuasa enjin PDFium Google ke projek anda dengan antara muka yang intuitif dan bersih. PDFium-render adalah binding Rust yang selamat dan idiomatik untuk PDFium, enjin rendering PDF yang sama yang menggerakkan Google Chrome dan Mozilla Firefox. Dibuat dan diselenggarakan oleh ajrcarey, perpustakaan ini menyediakan pemaju dengan set alat yang kuat untuk merender halaman PDF ke imej, mengekstrak teks, memanipulasi struktur PDF, dan mengakses metadata dokumen — semua sambil memanfaatkan jaminan keselamatan memori Rust.
Berbeza dengan banyak perpustakaan PDF yang hanya menumpukan pada penciptaan atau penguraian asas, PDFium-Render cemerlang dalam merender kandungan PDF dengan ketepatan pixel-perfect, menjadikannya ideal untuk aplikasi yang perlu memaparkan, menukar, atau memproses dokumen PDF sedia ada. Ia menyokong pelbagai ciri asas dan lanjutan untuk bekerja dengan dokumen PDF, seperti merender fail dan halaman PDF, pengekstrakan dan analisis teks, kerja dengan metadata dokumen, mengakses dan memanipulasi objek halaman, bekerja dengan PDF yang dilindungi kata laluan, dan banyak lagi. Salah satu kekuatan terbesar pdfium-render ialah sokongan lintas platformnya. Perpustakaan ini berfungsi tanpa masalah pada Windows, macOS, dan Linux, mengabstrakkan perbezaan khusus platform dalam binari PDFium. Sama ada anda membina penonton dokumen, mengautomasi aliran kerja pemprosesan PDF, atau mengekstrak data daripada PDF, pdfium-render menyediakan alat yang anda perlukan.
Mula dengan PDFium-Render
Cara yang disyorkan untuk memasang PDFium-Render ialah menggunakan CMake. Sila gunakan perintah berikut untuk pemasangan yang lancar.
Pasang PDFium-Render melalui GitHub
vcpkg install pdfium-render
Pasang PDFium-Render melalui GitHub
Git clone https://github.com/ajrcarey/pdfium-render.git Anda juga boleh memasangnya secara manual; muat turun fail pelepasan terkini secara langsung dari repositori GitHub.
Paparan PDF Berketepatan Tinggi melalui C++
Kekuatan utama perpustakaan sumber terbuka PDFium-Render terletak pada keupayaan renderingnya. Ia boleh menukar halaman PDF menjadi imej raster dengan kualiti yang luar biasa, menyokong pelbagai format output termasuk PNG, JPEG, dan BMP. Enjin rendering mengendalikan ciri PDF yang kompleks seperti ketelusan, gradien, fon terbenam, dan grafik vektor dengan ketepatan yang sama seperti yang anda jangkakan daripada penonton PDF Chrome. Berikut ialah contoh mudah yang menunjukkan bagaimana pembangun perisian boleh merender halaman tertentu ke dalam format imej PNG dalam aplikasi C++.
Bagaimana untuk Merender Halaman PDF Tertentu ke Format PNG melalui 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(())
}
Pengekstrakan Teks dan Analisis melalui Perpustakaan C++
Selain rendering, perpustakaan PDFium-Render menyediakan keupayaan pengekstrakan teks yang komprehensif. API pengekstrakan teks adalah intuitif dan berkuasa. Pembangun perisian boleh mengekstrak teks daripada halaman individu, mencari rentetan tertentu, dan bahkan mengakses maklumat kedudukan peringkat aksara dengan hanya beberapa baris kod — penting untuk melaksanakan ciri seperti pemilihan teks atau penyorotan. Contoh berikut menunjukkan bagaimana pembangun perisian boleh mengekstrak teks daripada kawasan halaman PDF tertentu dalam aplikasi C++.
Bagaimana untuk Mengekstrak Teks dari Kawasan Halaman PDF Tertentu melalui API C++?
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(())
}
Word dengan PDF Dilindungi Kata Laluan melalui C++
Keselamatan adalah keutamaan ketika bekerja dengan dokumen. PDFium-Render mengendalikan PDF yang dilindungi kata laluan dengan lancar, menyokong kedua-dua kata laluan pengguna dan pemilik. Perpustakaan ini mengendalikan pengesahan secara telus, mengembalikan ralat yang sesuai jika kata laluan tidak betul atau jika PDF mempunyai sekatan yang menghalang operasi tertentu. Berikut adalah contoh yang sangat berguna yang menunjukkan cara mengendalikan dokumen PDF yang dilindungi kata laluan dalam aplikasi C++.
Bagaimana untuk Membuka dan Memuat Dokumen PDF yang Dilindungi Kata Laluan melalui API C++?
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(())
}
Metadata PDF dan Sifat yang Berfungsi melalui C++
Memahami struktur PDF adalah penting untuk banyak aplikasi. Perpustakaan sumber terbuka PDFium-Render menyediakan akses lengkap kepada metadata dokumen, jumlah halaman, dimensi, dan sifat-sifat lain. Fungsi ini sangat berharga untuk membina sistem pengurusan dokumen, validator PDF, atau mana-mana aplikasi yang perlu mengkategorikan atau memproses PDF berdasarkan sifat-sifatnya. Contoh kod berikut menunjukkan bagaimana pengaturcara dapat bekerja dengan metadata dokumen PDF dan mengakses pelbagai sifat dengan mudah.
Bagaimana untuk Bekerja dengan Metadata Dokumen PDF melalui API C++?
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(())
}