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

Nemokama C++ biblioteka PDF puslapių renderavimui į paveikslėlius ir teksto išgavimui.

Atviro kodo C++ PDF apdorojimo biblioteka PDF puslapių renderavimui į paveikslėlius, teksto išgavimui, darbui su slaptažodžiu apsaugotais PDF ir dokumentų metaduomenų prieigai per C++ API.

Kas yra PDFium-Render?

PDF tvarkymas ir atvaizdavimas C++ programoje istoriniu požiūriu buvo sudėtinga užduotis, dažnai reikalaujanti brangių komercinių licencijų arba nepatogių atviro kodo įrankių. Pateikiame PDFium-Render – modernią, tik antraščių (header-only) C++ apvalkalo biblioteką, kuri savo intuityvia ir švarią sąsają į jūsų projektus atneša „Google“ PDFium variklio galią. PDFium-render yra saugus, idiomatiškas Rust susiejimas su PDFium, tuo pačiu PDF atvaizdavimo varikliu, kuris varo „Google Chrome“ ir „Mozilla Firefox“. Sukurtą ir prižiūrimą ajrcarey, ši biblioteka suteikia kūrėjams galingą įrankių rinkinį PDF puslapių atvaizdavimui į vaizdus, teksto išgavimui, PDF struktūrų manipuliavimui ir dokumentų metaduomenų prieigai – viskas naudojant Rust atminties saugumo garantijas.

Nors daugelis PDF bibliotekų koncentruojasi tik į kūrimą arba pagrindinį analizavimą, PDFium-Render puikiai atvaizduoja PDF turinį su pikseliu tikslumu, todėl ji yra idealus sprendimas programoms, kurioms reikia rodyti, konvertuoti arba apdoroti esamus PDF dokumentus. Ji palaiko įvairias bazines ir pažangias funkcijas darbui su PDF dokumentais, tokias kaip PDF failų ir puslapių atvaizdavimas, teksto ištrauka ir analizė, darbas su dokumentų metaduomenimis, prieiga ir puslapių objektų manipuliavimas, darbas su slaptažodžiu apsaugotais PDF ir dar daugiau. Vienas iš didžiausių pdfium-render privalumų yra kryžminės platformos palaikymas. Biblioteka sklandžiai veikia „Windows“, „macOS“ ir „Linux“ sistemose, abstrahuodama platformos specifinius PDFium binarinių failų skirtumus. Nesvarbu, ar kuriate dokumentų peržiūros programą, automatizuojate PDF apdorojimo procesus, ar išgaunate duomenis iš PDF, pdfium-render suteikia reikiamus įrankius.

Previous Next

Pradžia su PDFium-Render

Rekomenduojamas būdas įdiegti PDFium-Render yra naudojant CMake. Prašome naudoti šią komandą sklandžiam įdiegimui.

Įdiekite PDFium-Render per GitHub

 vcpkg install pdfium-render

Įdiekite PDFium-Render per GitHub

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

Taip pat galite įdiegti rankiniu būdu; atsisiųskite naujausius leidimo failus tiesiai iš GitHub repozytorijos.

Aukštos kokybės PDF atvaizdavimas naudojant C++

Atviro kodo PDFium-Render bibliotekos pagrindinis stiprumas slypi jos atvaizdavimo galimybėse. Ji gali konvertuoti PDF puslapius į rastrinius vaizdus su išskirtine kokybe, palaikydama įvairius išvesties formatus, įskaitant PNG, JPEG ir BMP. Atvaizdavimo variklis tvarko sudėtingas PDF savybes, tokias kaip skaidrumas, gradientai, įterptos šriftai ir vektorinė grafika, su ta pačia tikslumu, kurio tikėtumėtės iš Chrome PDF peržiūros. Čia pateiktas paprastas pavyzdys, kuris parodo, kaip programinės įrangos kūrėjai gali atvaizduoti konkretų puslapį PNG formatu C++ programose.

Kaip atvaizduoti konkretų PDF puslapį PNG formatu naudojant 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(())
}

Teksto ištrauka ir analizė naudojant C++ biblioteką

Be atvaizdavimo, PDFium-Render biblioteka suteikia išsamias teksto ištraukimo galimybes. Teksto ištraukimo API yra intuityvi ir galinga. Programinės įrangos kūrėjai gali ištraukti tekstą iš atskirų puslapių, ieškoti konkrečių eilučių ir net gauti simbolio lygio pozicionavimo informaciją vos keliais kodo eilutėmis – tai būtina įgyvendinant funkcijas, tokias kaip teksto pasirinkimas ar paryškinimas. Tolimesnis pavyzdys rodo, kaip programinės įrangos kūrėjai gali ištraukti tekstą iš konkrečių PDF puslapio regionų C++ programose.

Kaip išgauti tekstą iš konkrečių PDF puslapio regionų naudojant 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 su slaptažodžiu apsaugotu PDF naudojant C++

Saugumas yra svarbiausias dirbant su dokumentais. PDFium-Render be problemų tvarko slaptažodžiu apsaugotus PDF failus, palaikydamas tiek naudotojo, tiek savininko slaptažodžius. Biblioteka skaidriai tvarko autentifikavimą, grąžindama atitinkamas klaidas, jei slaptažodis neteisingas arba jei PDF turi apribojimų, kurie neleidžia atlikti tam tikrų operacijų. Štai labai naudingas pavyzdys, kuris rodo, kaip tvarkyti slaptažodžiu apsaugotus PDF dokumentus C++ programose.

Kaip atverti ir įkelti slaptažodžiu apsaugotus PDF dokumentus naudojant 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(())
}

PDF metaduomenų ir savybių tvarkymas naudojant C++

PDF struktūros supratimas yra būtinas daugeliui programų. Atviro kodo PDFium-Render biblioteka suteikia visišką prieigą prie dokumento metaduomenų, puslapių skaičiaus, matmenų ir kitų savybių. Ši funkcija yra neįkainojama kuriant dokumentų valdymo sistemas, PDF tikrintuvus arba bet kurią programą, kuri turi klasifikuoti ar apdoroti PDF failus pagal jų savybes. Žemiau pateiktas kodo pavyzdys demonstruoja, kaip programuotojai gali dirbti su PDF dokumentų metaduomenimis ir lengvai pasiekti įvairias savybes.

Kaip dirbti su PDF dokumentų metaduomenimis naudojant 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(())
}
 Lietuvių