Libreria C++ gratuita per renderizzare pagine PDF in immagine ed estrarre testo.
Libreria open source C++ per l'elaborazione di PDF per il rendering di pagine PDF in immagini, l'estrazione di testo, la gestione di PDF protetti da password e l'accesso ai metadati del documento tramite API C++.
Cos'è PDFium-Render?
La gestione e il rendering dei PDF all'interno di un'applicazione C++ è stata storicamente una sfida complessa, spesso richiedente licenze commerciali costose o strumenti open-source ingombranti. Entra in gioco PDFium-Render, una moderna libreria wrapper C++ header-only che porta la potenza del motore PDFium di Google nei tuoi progetti con un'interfaccia intuitiva e pulita. PDFium-render è un binding Rust sicuro e idiomatico per PDFium, lo stesso motore di rendering PDF che alimenta Google Chrome e Mozilla Firefox. Creata e mantenuta da ajrcarey, questa libreria fornisce agli sviluppatori un potente toolkit per renderizzare pagine PDF in immagini, estrarre testo, manipolare strutture PDF e accedere ai metadati dei documenti—tutto sfruttando le garanzie di sicurezza della memoria di Rust.
A differenza di molte librerie PDF che si concentrano esclusivamente sulla creazione o sul parsing di base, PDFium-Render eccelle nel rendering dei contenuti PDF con precisione pixel-perfetta, rendendola ideale per le applicazioni che necessitano di visualizzare, convertire o elaborare documenti PDF esistenti. Supporta varie funzionalità di base e avanzate per lavorare con i documenti PDF, come il rendering di file e pagine PDF, l'estrazione e l'analisi del testo, la gestione dei metadati del documento, l'accesso e la manipolazione degli oggetti della pagina, il lavoro con PDF protetti da password, e molto altro. Uno dei punti di forza più grandi di pdfium-render è il supporto multipiattaforma. La libreria funziona senza problemi su Windows, macOS e Linux, astraendo le differenze specifiche della piattaforma nei binari PDFium. Che tu stia costruendo un visualizzatore di documenti, automatizzando flussi di lavoro di elaborazione PDF o estraendo dati dai PDF, pdfium-render fornisce gli strumenti di cui hai bisogno.
Iniziare con PDFium-Render
Il modo consigliato per installare PDFium-Render è utilizzare CMake. Si prega di usare il seguente comando per un'installazione senza problemi.
Installa PDFium-Render tramite GitHub
vcpkg install pdfium-render
Installa PDFium-Render tramite GitHub
Git clone https://github.com/ajrcarey/pdfium-render.git Puoi anche installarlo manualmente; scarica i file dell'ultima versione direttamente dal repository GitHub.
Rendering PDF ad alta fedeltà tramite C++
La principale forza della libreria open source PDFium-Render risiede nelle sue capacità di rendering. Può convertire le pagine PDF in immagini raster con qualità eccezionale, supportando vari formati di output tra cui PNG, JPEG e BMP. Il motore di rendering gestisce funzionalità PDF complesse come trasparenza, gradienti, font incorporati e grafica vettoriale con la stessa precisione che ti aspetteresti dal visualizzatore PDF di Chrome. Ecco un semplice esempio che mostra come gli sviluppatori software possano renderizzare una pagina specifica in formato immagine PNG all'interno di applicazioni C++.
Come renderizzare una pagina PDF specifica in formato PNG tramite 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(())
}
Estrazione e analisi del testo tramite libreria C++
Oltre al rendering, la libreria PDFium-Render offre capacità complete di estrazione del testo. L'API di estrazione del testo è intuitiva e potente. Gli sviluppatori software possono estrarre il testo da pagine individuali, cercare stringhe specifiche e persino accedere alle informazioni di posizionamento a livello di carattere con sole poche righe di codice — fondamentale per implementare funzionalità come la selezione o l'evidenziazione del testo. L'esempio seguente mostra come gli sviluppatori software possano estrarre il testo da regioni specifiche di pagine PDF all'interno di applicazioni C++.
Come estrarre testo da regioni specifiche di pagine PDF tramite 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 con PDF protetto da password tramite C++
La sicurezza è fondamentale quando si lavora con i documenti. PDFium-Render gestisce i PDF protetti da password in modo fluido, supportando sia le password utente che quelle del proprietario. La libreria gestisce l'autenticazione in modo trasparente, restituendo errori appropriati se la password è errata o se il PDF ha restrizioni che impediscono determinate operazioni. Ecco un esempio molto utile che mostra come gestire i documenti PDF protetti da password all'interno di applicazioni C++.
Come aprire e caricare documenti PDF protetti da password tramite 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(())
}
Gestione dei metadati e delle proprietà PDF tramite C++
Comprendere la struttura di un PDF è essenziale per molte applicazioni. La libreria open source PDFium-Render fornisce accesso completo ai metadati del documento, al conteggio delle pagine, alle dimensioni e ad altre proprietà. Questa funzionalità è inestimabile per la creazione di sistemi di gestione documentale, validator PDF o qualsiasi applicazione che necessita di categorizzare o elaborare PDF in base alle loro proprietà. Il seguente esempio di codice dimostra come i programmatori possano lavorare con i metadati dei documenti PDF e accedere a varie proprietà con facilità.
Come gestire i metadati dei documenti PDF tramite 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(())
}