1. produkty
  2.   PDF
  3.   C++
  4.   PDFium-Render
 
  

Bezplatná C++ knihovna pro renderování PDF stránek do obrázku a extrahování textu.

Open source C++ knihovna pro zpracování PDF, určená pro renderování PDF stránek do obrázků, extrahování textu, práci s PDF chráněnými heslem a přístup k metadatům dokumentu prostřednictvím C++ API.

Co je PDFium-Render?

Zpracování a vykreslování PDF v rámci C++ aplikace bylo historicky složitým úkolem, často vyžadujícím drahé komerční licence nebo obtížné open-source nástroje. Přichází PDFium-Render, moderní knihovna C++ pouze s hlavičkami, která přináší sílu PDFium enginu od Googlu do vašich projektů s intuitivním a čistým rozhraním. PDFium-render je bezpečné, idiomatické Rustové vazby na PDFium, stejný renderovací engine PDF, který pohání Google Chrome a Mozilla Firefox. Vytvořil a udržuje ji ajrcarey, tato knihovna poskytuje vývojářům výkonný nástrojový set pro vykreslování PDF stránek do obrázků, extrahování textu, manipulaci se strukturou PDF a přístup k metadatům dokumentu — vše při využití záruk bezpečnosti paměti Rustu.

Na rozdíl od mnoha PDF knihoven, které se zaměřují výhradně na tvorbu nebo základní parsování, PDFium-Render vyniká v renderování PDF obsahu s pixelovou přesností, což jej činí ideálním pro aplikace, které potřebují zobrazovat, konvertovat nebo zpracovávat existující PDF dokumenty. Podporuje různé základní i pokročilé funkce pro práci s PDF dokumenty, jako je renderování PDF souborů a stránek, extrakce a analýza textu, práce s metadaty dokumentu, přístup a manipulace s objekty stránek, práce s PDF chráněnými heslem a další. Jednou z největších sil PDFium-Render je podpora více platforem. Knihovna funguje bez problémů na Windows, macOS a Linuxu a abstrahuje rozdíly specifické pro platformu v binárkách PDFium. Ať už vytváříte prohlížeč dokumentů, automatizujete workflow zpracování PDF nebo extrahujete data z PDF, PDFium-Render poskytuje nástroje, které potřebujete.

Previous Next

Začínáme s PDFium-Render

Doporučený způsob instalace PDFium-Render je pomocí CMake. Použijte prosím následující příkaz pro hladkou instalaci.

Instalace PDFium-Render přes GitHub

 vcpkg install pdfium-render

Instalace PDFium-Render přes GitHub

 Git clone https://github.com/ajrcarey/pdfium-render.git 

Můžete jej také nainstalovat ručně; stáhněte nejnovější soubory vydání přímo z GitHub repozitáře.

Vysoká věrnost renderování PDF pomocí C++

Primární síla open source knihovny PDFium-Render spočívá v jejích renderovacích schopnostech. Dokáže převádět stránky PDF na rastrové obrázky s výjimečnou kvalitou a podporuje různé výstupní formáty, včetně PNG, JPEG a BMP. Renderovací engine zvládá složité funkce PDF, jako jsou průhlednost, gradienty, vložená písma a vektorová grafika, s přesností, kterou byste očekávali od PDF prohlížeče v Chrome. Zde je jednoduchý příklad, který ukazuje, jak mohou vývojáři softwaru renderovat konkrétní stránku do formátu PNG v C++ aplikacích.\n\n\n

\n

Jak renderovat konkrétní stránku PDF do formátu PNG pomocí C++?

\n
use pdfium_render::prelude::*;\n\nfn render_pdf_page() -> Result<(), PdfiumError> {\n    // Initialize PDFium library\n    let pdfium = Pdfium::new(\n        Pdfium::bind_to_library(Pdfium::pdfium_platform_library_name_at_path(\"./\"))\n            .or_else(|_| Pdfium::bind_to_system_library())?\n    );\n    \n    // Load a PDF document\n    let document = pdfium.load_pdf_from_file(\"sample.pdf\", None)?;\n    \n    // Get the first page\n    let page = document.pages().get(0)?;\n    \n    // Render the page to a bitmap at 300 DPI\n    let bitmap = page.render_with_config(\n        &PdfRenderConfig::new()\n            .set_target_width(2480) // 300 DPI for 8.27 inches\n            .set_target_height(3508) // 300 DPI for 11.69 inches\n    )?;\n    \n    // Save as PNG\n    bitmap.as_image().as_rgba8().unwrap()\n        .save(\"output.png\")?;\n    \n    Ok(())\n}\n
\n
\n\n \n\n\n

Extrahování textu a analýza pomocí knihovny C++

\n

Vedle renderování poskytuje knihovna PDFium-Render komplexní možnosti extrakce textu. API pro extrakci textu je intuitivní a výkonné. Vývojáři softwaru mohou extrahovat text z jednotlivých stránek, vyhledávat konkrétní řetězce a dokonce získávat informace o pozicích znaků na úrovni znaků pomocí několika řádků kódu — což je klíčové pro implementaci funkcí, jako je výběr textu nebo zvýraznění. Následující příklad ukazuje, jak mohou vývojáři softwaru extrahovat text z konkrétních oblastí PDF stránek v C++ aplikacích.

Jak extrahovat text z konkrétních oblastí stránek PDF pomocí 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 s PDF chráněným heslem pomocí C++

Bezpečnost je při práci s dokumenty naprosto zásadní. PDFium-Render bez problémů zpracovává PDF chráněná heslem a podporuje jak uživatelská, tak vlastní hesla. Knihovna provádí autentizaci transparentně a vrací odpovídající chyby, pokud je heslo nesprávné nebo pokud PDF obsahuje omezení, která brání určitým operacím. Zde je velmi užitečný příklad, který ukazuje, jak ve C++ aplikacích zacházet s PDF dokumenty chráněnými heslem.

Jak otevřít a načíst PDF dokumenty chráněné heslem pomocí 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(())
}

Práce s metadaty a vlastnostmi PDF pomocí C++

Pochopení struktury PDF je pro mnoho aplikací nezbytné. Open source knihovna PDFium-Render poskytuje úplný přístup k metadatům dokumentu, počtu stránek, rozměrům a dalším vlastnostem. Tato funkčnost je neocenitelná při tvorbě systémů pro správu dokumentů, PDF validátorů nebo jakékoli aplikace, která potřebuje kategorizovat či zpracovávat PDF podle jejich vlastností. Následující ukázkový kód demonstruje, jak mohou programátoři snadno pracovat s metadaty PDF dokumentů a přistupovat k různým vlastnostem.

Jak pracovat s metadaty PDF dokumentů pomocí 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(())
}
 Čeština