Kostenlose C++‑Bibliothek zum Rendern von PDF-Seiten zu Bildern & Extrahieren von Text.
Open-Source-C++-PDF-Verarbeitungsbibliothek zum Rendern von PDF-Seiten zu Bildern, Extrahieren von Text, Arbeiten mit passwortgeschützten PDFs und Zugriff auf Dokumenten‑Metadaten über die C++‑API.
Was ist PDFium-Render?
Die Handhabung und das Rendern von PDFs innerhalb einer C++-Anwendung war historisch gesehen eine komplexe Herausforderung, die oft teure kommerzielle Lizenzen oder umständliche Open-Source-Tools erforderte. Hier kommt PDFium-Render ins Spiel, eine moderne, header-only C++ Wrapper-Bibliothek, die die Leistungsfähigkeit der PDFium-Engine von Google in Ihre Projekte bringt, mit einer intuitiven und sauberen Schnittstelle. PDFium-render ist ein sicheres, idiomatisches Rust-Binding für PDFium, dieselbe PDF-Rendering-Engine, die Google Chrome und Mozilla Firefox antreibt. Erstellt und gepflegt von ajrcarey, bietet diese Bibliothek Entwicklern ein leistungsstarkes Toolkit zum Rendern von PDF-Seiten zu Bildern, zum Extrahieren von Text, zum Manipulieren von PDF-Strukturen und zum Zugriff auf Dokumenten-Metadaten – und das alles unter Nutzung der Speichersicherheitsgarantien von Rust.
Im Gegensatz zu vielen PDF-Bibliotheken, die sich ausschließlich auf die Erstellung oder grundlegende Analyse konzentrieren, zeichnet sich PDFium-Render durch das Rendern von PDF-Inhalten mit pixelgenauer Genauigkeit aus, was es ideal für Anwendungen macht, die vorhandene PDF-Dokumente anzeigen, konvertieren oder verarbeiten müssen. Es unterstützt verschiedene grundlegende und erweiterte Funktionen für die Arbeit mit PDF-Dokumenten, wie das Rendern von PDF-Dateien und -Seiten, die Textextraktion und -analyse, die Arbeit mit Dokumenten-Metadaten, den Zugriff auf und die Manipulation von Seitenobjekten, die Arbeit mit passwortgeschützten PDFs und vieles mehr. Eine der größten Stärken von pdfium-render ist die plattformübergreifende Unterstützung. Die Bibliothek funktioniert nahtlos unter Windows, macOS und Linux und abstrahiert plattformspezifische Unterschiede in den PDFium-Binärdateien. Egal, ob Sie einen Dokumentenbetrachter erstellen, PDF-Verarbeitungsabläufe automatisieren oder Daten aus PDFs extrahieren, pdfium-render stellt die benötigten Werkzeuge bereit.
Erste Schritte mit PDFium-Render
TThe empfohlene Weg, PDFium-Render zu installieren, ist die Verwendung von CMake. Bitte verwenden Sie den folgenden Befehl für eine reibungslose Installation.
PDFium-Render über GitHub installieren
vcpkg install pdfium-render
PDFium-Render über GitHub installieren
Git clone https://github.com/ajrcarey/pdfium-render.git Sie können es auch manuell installieren; laden Sie die neuesten Release-Dateien direkt vom GitHub-Repository herunter.
Hochpräzises PDF-Rendering mit C++
Die Open-Source-Bibliothek PDFium-Render zeichnet sich vor allem durch ihre Rendering‑Fähigkeiten aus. Sie kann PDF‑Seiten in Rasterbilder von außergewöhnlicher Qualität konvertieren und unterstützt verschiedene Ausgabeformate, darunter PNG, JPEG und BMP. Die Rendering‑Engine verarbeitet komplexe PDF‑Features wie Transparenz, Verläufe, eingebettete Schriften und Vektorgrafiken mit derselben Genauigkeit, die man vom PDF‑Viewer in Chrome erwarten würde. Hier ist ein einfaches Beispiel, das zeigt, wie Entwickler eine bestimmte Seite in das PNG‑Bildformat innerhalb von C++‑Anwendungen rendern können.
Wie rendert man eine bestimmte PDF‑Seite in das PNG‑Format mit 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(())
}
Textextraktion und Analyse mit C++‑Bibliothek
Über das Rendering hinaus bietet die PDFium-Render-Bibliothek umfassende Möglichkeiten zur Textextraktion. Die Textextraktions‑API ist intuitiv und leistungsstark. Entwickler können Text aus einzelnen Seiten extrahieren, nach bestimmten Zeichenketten suchen und sogar positionsbezogene Informationen auf Zeichenebene mit nur wenigen Codezeilen abrufen – entscheidend für die Implementierung von Funktionen wie Textauswahl oder Hervorhebung. Das folgende Beispiel zeigt, wie Entwickler Text aus bestimmten PDF‑Seitenbereichen innerhalb von C++‑Anwendungen extrahieren können.
Wie extrahiere ich Text aus bestimmten PDF-Seitenbereichen über die 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 mit passwortgeschütztem PDF via C++
Sicherheit hat oberste Priorität beim Arbeiten mit Dokumenten. PDFium-Render verarbeitet passwortgeschützte PDFs nahtlos und unterstützt sowohl Benutzer- als auch Eigentümerpasswörter. Die Bibliothek behandelt die Authentifizierung transparent und gibt entsprechende Fehlermeldungen zurück, wenn das Passwort falsch ist oder das PDF Einschränkungen hat, die bestimmte Vorgänge verhindern. Hier ist ein sehr nützliches Beispiel, das zeigt, wie man passwortgeschützte PDF-Dokumente in C++‑Anwendungen handhabt.
Wie öffne und lade ich passwortgeschützte PDF-Dokumente über die 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(())
}
Arbeiten mit PDF-Metadaten und -Eigenschaften via C++
Das Verständnis der Struktur eines PDFs ist für viele Anwendungen unerlässlich. Die Open‑Source‑Bibliothek PDFium-Render bietet vollständigen Zugriff auf Dokumenten‑Metadaten, Seitenzahlen, Abmessungen und weitere Eigenschaften. Diese Funktionalität ist unverzichtbar beim Aufbau von Dokumenten‑Management‑Systemen, PDF‑Validatoren oder jeder Anwendung, die PDFs anhand ihrer Eigenschaften kategorisieren oder verarbeiten muss. Das folgende Codebeispiel zeigt, wie Programmierer mit PDF‑Dokumenten‑Metadaten arbeiten und verschiedene Eigenschaften mühelos abrufen können.
Wie arbeite ich mit den Metadaten von PDF-Dokumenten über die 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(())
}