1. Termékek
  2.   PDF
  3.   C++
  4.   PDFium-Render
 
  

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.

Previous Next

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(())
}
 Magyar