Gratis C++-bibliotheek om PDF-pagina's naar afbeelding te renderen & tekst te extraheren.
Open source C++ PDF-verwerkingsbibliotheek voor het renderen van PDF-pagina's naar afbeeldingen, tekst extraheren, werken met met wachtwoord beveiligde PDF's, en toegang tot documentmetadata via C++ API.
Wat is PDFium-Render?
Het verwerken en renderen van PDF's binnen een C++-applicatie is historisch gezien een complexe uitdaging geweest, vaak met dure commerciële licenties of omslachtige open‑source‑tools. Maak kennis met PDFium-Render, een moderne, header‑only C++‑wrapperbibliotheek die de kracht van Google's PDFium‑engine naar uw projecten brengt met een intuïtieve en schone interface. PDFium-render is een veilige, idiomatische Rust‑binding voor PDFium, dezelfde PDF‑renderengine die Google Chrome en Mozilla Firefox aandrijft. Gecreëerd en onderhouden door ajrcarey, biedt deze bibliotheek ontwikkelaars een krachtig gereedschap voor het renderen van PDF‑pagina's naar afbeeldingen, het extraheren van tekst, het manipuleren van PDF‑structuren en het benaderen van documentmetadata — allemaal terwijl de geheugenveiligheidsgaranties van Rust worden benut.
In tegenstelling tot veel PDF-bibliotheken die zich uitsluitend richten op creatie of eenvoudige parsing, blinkt PDFium-Render uit in het renderen van PDF-inhoud met pixel-perfecte nauwkeurigheid, waardoor het ideaal is voor toepassingen die bestaande PDF-documenten moeten weergeven, converteren of verwerken. Het ondersteunt diverse basis- en geavanceerde functies voor het werken met PDF-documenten, zoals het renderen van PDF-bestanden en -pagina's, tekstextractie en -analyse, werken met documentmetadata, toegang tot en manipulatie van pagina-objecten, werken met met wachtwoord beveiligde PDF's, en meer. Een van de grootste sterktes van pdfium-render is de cross-platform ondersteuning. De bibliotheek werkt naadloos op Windows, macOS en Linux, en abstraheert platform‑specifieke verschillen in PDFium-binaries. Of je nu een documentviewer bouwt, PDF‑verwerkingsworkflows automatiseert, of gegevens uit PDF's extraheert, pdfium-render biedt de tools die je nodig hebt.
Aan de slag met PDFium-Render
De aanbevolen manier om PDFium-Render te installeren is via CMake. Gebruik alstublieft het volgende commando voor een soepele installatie.
Installeer PDFium-Render via GitHub
vcpkg install pdfium-render
Installeer PDFium-Render via GitHub
Git clone https://github.com/ajrcarey/pdfium-render.git U kunt het ook handmatig installeren; download de nieuwste release‑bestanden rechtstreeks van de GitHub-repository.
PDF-rendering met hoge nauwkeurigheid via C++
De primaire sterkte van de open source PDFium-Render bibliotheek ligt in zijn rendermogelijkheden. Hij kan PDF-pagina's omzetten naar rasterafbeeldingen met uitzonderlijke kwaliteit, en ondersteunt verschillende uitvoerformaten, waaronder PNG, JPEG en BMP. De renderengine verwerkt complexe PDF-functies zoals transparantie, verlopen, ingesloten lettertypen en vectorafbeeldingen met dezelfde nauwkeurigheid die je van de PDF-viewer van Chrome zou verwachten. Hier is een eenvoudig voorbeeld dat laat zien hoe softwareontwikkelaars een specifieke pagina kunnen renderen naar een PNG-afbeeldingsformaat binnen C++-toepassingen.
Hoe render je een specifieke PDF-pagina naar PNG-formaat via 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(())
}
Tekstextractie en analyse via C++-bibliotheek
Naast renderen biedt de PDFium-Render bibliotheek uitgebreide mogelijkheden voor tekstextractie. De tekst‑extractie‑API is intuïtief en krachtig. Softwareontwikkelaars kunnen tekst uit individuele pagina's halen, zoeken naar specifieke tekenreeksen, en zelfs toegang krijgen tot positioneringsinformatie op teken‑niveau met slechts een paar regels code — cruciaal voor het implementeren van functies zoals tekstselectie of markering. Het volgende voorbeeld laat zien hoe softwareontwikkelaars tekst kunnen extraheren uit specifieke PDF-paginagedeelten binnen C++-toepassingen.
Hoe tekst extraheren uit specifieke PDF-paginagedeelten via 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(())
}
Word met wachtwoordbeveiligde PDF via C++
Beveiliging staat voorop bij het werken met documenten. PDFium-Render verwerkt wachtwoordbeveiligde PDF's naadloos en ondersteunt zowel gebruikers- als eigenaarswachtwoorden. De bibliotheek behandelt authenticatie transparant en geeft passende fouten terug als het wachtwoord onjuist is of als de PDF beperkingen heeft die bepaalde bewerkingen verhinderen. Hier is een zeer nuttig voorbeeld dat laat zien hoe je wachtwoordbeveiligde PDF-documenten in C++-toepassingen kunt afhandelen.
Hoe PDF-documenten met wachtwoordbeveiliging openen en laden via 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(())
}
Werkende PDF-metadata en -eigenschappen via C++
Het begrijpen van de structuur van een PDF is essentieel voor veel toepassingen. De open source PDFium-Render bibliotheek biedt volledige toegang tot documentmetadata, paginatellingen, afmetingen en andere eigenschappen. Deze functionaliteit is van onschatbare waarde bij het bouwen van documentbeheersystemen, PDF-validatoren of elke applicatie die PDF's moet categoriseren of verwerken op basis van hun eigenschappen. Het volgende codevoorbeeld laat zien hoe programmeurs met PDF-documentmetadata kunnen werken en gemakkelijk verschillende eigenschappen kunnen benaderen.
Hoe te werken met metadata van PDF-documenten via 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(())
}