Ingyenes C++ könyvtár PDF oldalak képpé rendereléséhez és szöveg kinyeréséhez.
Nyílt forráskódú C++ PDF feldolgozó könyvtár PDF oldalak képekké rendereléséhez, szöveg kinyeréséhez, jelszóval védett PDF-ekkel való munkához és a dokumentum metaadatok eléréséhez C++ API-n keresztül.
Mi az a PDFium-Render?
A PDF-ek kezelése és renderelése C++ alkalmazáson belül történelmileg összetett kihívás volt, gyakran drága kereskedelmi licenceket vagy nehézkes nyílt forráskódú eszközöket igényelve. Itt jön a PDFium-Render, egy modern, csak fejléceket tartalmazó C++ wrapper könyvtár, amely a Google PDFium motorjának erejét hozza projektjeibe egy intuitív és tiszta felülettel. A PDFium-render egy biztonságos, idiomatikus Rust kötés a PDFium-hoz, ugyanahhoz a PDF renderelő motorhoz, amely a Google Chrome-ot és a Mozilla Firefoxot hajtja. Ajrcarey által létrehozott és karbantartott könyvtár fejlesztőknek erőteljes eszköztárat biztosít a PDF oldalak képekké rendereléséhez, szöveg kinyeréséhez, PDF struktúrák manipulálásához és a dokumentum metaadatainak eléréséhez – mindezt a Rust memória-biztonsági garanciáit kihasználva.
Ellentétben sok PDF könyvtárral, amelyek csak a létrehozásra vagy az alapvető elemzésre koncentrálnak, a PDFium-Render kiváló a PDF tartalom pixelpontosságú megjelenítésében, így ideális olyan alkalmazások számára, amelyeknek meg kell jeleníteniük, konvertálniuk vagy feldolgozniuk kell meglévő PDF dokumentumokat. Támogat különféle alap- és haladó funkciókat a PDF dokumentumokkal való munkához, például PDF fájlok és oldalak renderelése, szövegkinyerés és elemzés, dokumentum metaadatok kezelése, oldalobjektumok elérése és módosítása, jelszóval védett PDF-ek kezelése, és még sok más. A pdfium-render egyik legnagyobb erőssége a platformközi támogatás. A könyvtár zökkenőmentesen működik Windows, macOS és Linux rendszereken, elrejtve a PDFium binárisok platformspecifikus különbségeit. Akár dokumentumnézőt építesz, PDF feldolgozási munkafolyamatokat automatizálsz, vagy adatokat nyersz ki a PDF-ekből, a pdfium-render biztosítja a szükséges eszközöket.
PDFium-Render használatának megkezdése
A PDFium-Render telepítésének ajánlott módja a CMake használata. Kérjük, használd a következő parancsot a zökkenőmentes telepítéshez.
PDFium-Render telepítése GitHub-on keresztül
vcpkg install pdfium-render
PDFium-Render telepítése GitHub-on keresztül
Git clone https://github.com/ajrcarey/pdfium-render.git Manuálisan is telepítheti; a legújabb kiadási fájlokat közvetlenül a GitHub tárolóból töltheti le.
Magas pontosságú PDF renderelés C++-on keresztül
Az nyílt forráskódú PDFium-Render könyvtár elsődleges erőssége a renderelési képességeiben rejlik. Képes PDF oldalakat raszteres képekké konvertálni kivételes minőségben, támogatva a különféle kimeneti formátumokat, mint a PNG, JPEG és BMP. A renderelő motor kezeli a komplex PDF funkciókat, mint az átlátszóság, színátmenetek, beágyazott betűkészletek és vektorgrafikák, ugyanazzal a pontossággal, amit a Chrome PDF-megjelenítőjétől elvárnánk. Itt egy egyszerű példa, amely bemutatja, hogyan tudnak a szoftverfejlesztők egy adott oldalt PNG képként renderelni C++ alkalmazásokban.
Hogyan rendereljünk egy adott PDF oldalt PNG formátumba C++-on keresztül?
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(())
}
Szövegkinyerés és elemzés C++ könyvtáron keresztül
A renderelésen túl a PDFium-Render könyvtár átfogó szövegkinyerési képességeket biztosít. A szövegkinyerési API intuitív és erőteljes. A szoftverfejlesztők képesek szöveget kinyerni egyes oldalakról, keresni konkrét karakterláncokat, sőt, karakter szintű pozicionálási információkhoz is hozzáférni néhány kódsorral – ami elengedhetetlen a szövegkijelölés vagy kiemelés funkciók megvalósításához. Az alábbi példa bemutatja, hogyan tudnak a szoftverfejlesztők szöveget kinyerni adott PDF oldalrészletekből C++ alkalmazásokban.
Hogyan lehet szöveget kinyerni a PDF oldal bizonyos területeiről C++ API-n keresztül?
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 jelszóval védett PDF-fel C++-ban
A biztonság elsődleges fontosságú a dokumentumokkal dolgozva. A PDFium-Render zökkenőmentesen kezeli a jelszóval védett PDF-eket, támogatva mind a felhasználói, mind a tulajdonosi jelszavakat. A könyvtár átláthatóan kezeli a hitelesítést, megfelelő hibákat ad vissza, ha a jelszó helytelen, vagy ha a PDF korlátozásokat tartalmaz, amelyek bizonyos műveletek megakadályozzák. Itt egy nagyon hasznos példa, amely bemutatja, hogyan kezelhetők a jelszóval védett PDF-dokumentumok C++ alkalmazásokban.
Hogyan nyissunk meg és töltsünk be jelszóval védett PDF dokumentumokat C++ API-val?
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 metaadatok és tulajdonságok kezelése C++-ban
A PDF felépítésének megértése számos alkalmazás számára elengedhetetlen. A nyílt forráskódú PDFium-Render könyvtár teljes hozzáférést biztosít a dokumentum metaadataihoz, oldalszámokhoz, méretekhez és egyéb tulajdonságokhoz. Ez a funkció felbecsülhetetlen értékű dokumentumkezelő rendszerek, PDF-ellenőrzők vagy bármely olyan alkalmazás építéséhez, amelynek PDF-eket kell kategorizálnia vagy feldolgoznia azok tulajdonságai alapján. Az alábbi kódrészlet bemutatja, hogyan dolgozhatnak a programozók a PDF-dokumentumok metaadataival, és könnyedén hozzáférhetnek különféle tulajdonságokhoz.
Hogyan dolgozzunk a PDF dokumentumok metaadataival C++ API-n keresztül?
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(())
}