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

Bibliotecă C++ gratuită pentru redarea paginilor PDF în imagini și extragerea textului.

Bibliotecă open source C++ pentru procesarea PDF-urilor, pentru redarea paginilor PDF în imagini, extragerea textului, lucrul cu PDF-uri protejate prin parolă și accesarea metadatelor documentului prin API C++.

Ce este PDFium-Render?

Gestionarea și redarea PDF-urilor într-o aplicație C++ a fost istoric o provocare complexă, implicând adesea licențe comerciale costisitoare sau instrumente open-source greoaie. Intră în scenă PDFium-Render, o bibliotecă modernă, header-only, de tip wrapper C++ care aduce puterea motorului PDFium de la Google în proiectele tale printr-o interfață intuitivă și curată. PDFium-render este o legătură Rust sigură și idiomatică pentru PDFium, același motor de redare PDF care alimentează Google Chrome și Mozilla Firefox. Creată și întreținută de ajrcarey, această bibliotecă oferă dezvoltatorilor un set puternic de instrumente pentru redarea paginilor PDF în imagini, extragerea textului, manipularea structurilor PDF și accesarea metadatelor documentului — toate acestea profitând de garanțiile de siguranță a memoriei oferite de Rust.

Spre deosebire de multe biblioteci PDF care se concentrează exclusiv pe creare sau parsare de bază, PDFium-Render excelează în redarea conținutului PDF cu acuratețe pixel-perfectă, făcându-l ideal pentru aplicații care trebuie să afișeze, convertească sau să proceseze documente PDF existente. Acceptă diverse funcționalități de bază și avansate pentru lucrul cu documente PDF, cum ar fi redarea fișierelor și paginilor PDF, extragerea și analiza textului, lucrul cu metadatele documentului, accesul și manipularea obiectelor de pagină, lucrul cu PDF-uri protejate prin parolă și multe altele. Una dintre cele mai mari puncte forte ale pdfium-render este suportul său multiplatformă. Biblioteca funcționează fără probleme pe Windows, macOS și Linux, abstractizând diferențele specifice platformei în binarele PDFium. Indiferent dacă dezvoltați un vizualizator de documente, automatizați fluxuri de lucru de procesare PDF sau extrageți date din PDF-uri, pdfium-render oferă instrumentele de care aveți nevoie.

Previous Next

Începere cu PDFium-Render

Calea recomandată pentru instalarea PDFium-Render este utilizarea CMake. Vă rugăm să folosiți comanda următoare pentru o instalare fără probleme.

Instalați PDFium-Render prin GitHub

 vcpkg install pdfium-render

Instalați PDFium-Render prin GitHub

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

De asemenea, îl poţi instala manual; descarcă fișierele ultimei versiuni direct de pe depozitul GitHub.

Redare PDF de înaltă fidelitate prin C++

Principala forță a bibliotecii open source PDFium-Render constă în capacitățile sale de redare. Poate converti paginile PDF în imagini raster cu o calitate excepțională, suportând diverse formate de ieșire, inclusiv PNG, JPEG și BMP. Motorul de redare gestionează caracteristici PDF complexe, cum ar fi transparența, degradeurile, fonturile încorporate și grafica vectorială, cu aceeași precizie pe care ai aștepta‑o de la vizualizatorul PDF al Chrome. Iată un exemplu simplu care arată cum dezvoltatorii pot reda o pagină specifică în format de imagine PNG în cadrul aplicațiilor C++.

Cum să redați o pagină PDF specifică în format PNG prin 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(())
}

Extracție și analiză de text prin biblioteca C++

Dincolo de redare, biblioteca PDFium-Render oferă capabilități cuprinzătoare de extracție a textului. API-ul de extracție a textului este intuitiv și puternic. Dezvoltatorii pot extrage text din pagini individuale, căuta șiruri specifice și chiar accesa informații de poziționare la nivel de caracter cu doar câteva linii de cod — esențial pentru implementarea funcționalităților precum selectarea sau evidențierea textului. Următorul exemplu arată cum dezvoltatorii pot extrage text din regiuni specifice ale paginilor PDF în cadrul aplicațiilor C++.

Cum să extragi text din regiuni specifice ale paginilor PDF prin API C++?

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 cu PDF protejat prin parolă prin C++

Securitatea este esențială atunci când se lucrează cu documente. PDFium-Render gestionează PDF-urile protejate prin parolă fără probleme, suportând atât parolele de utilizator, cât și cele de proprietar. Biblioteca gestionează autentificarea în mod transparent, returnând erori corespunzătoare dacă parola este incorectă sau dacă PDF-ul are restricții care împiedică anumite operații. Iată un exemplu foarte util care arată cum să gestionați documentele PDF protejate prin parolă în aplicații C++.

Cum să deschizi și să încarci documente PDF protejate prin parolă prin API C++?

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

Gestionarea metadatelor și proprietăților PDF prin C++

Înțelegerea structurii unui PDF este esențială pentru multe aplicații. Biblioteca open source PDFium-Render oferă acces complet la metadatele documentului, numărul de pagini, dimensiuni și alte proprietăți. Această funcționalitate este de neprețuit pentru construirea sistemelor de gestionare a documentelor, validatorilor PDF sau orice aplicație care trebuie să categorizeze sau să proceseze PDF-uri pe baza proprietăților lor. Exemplul de cod de mai jos demonstrează cum programatorii pot lucra cu metadatele documentelor PDF și pot accesa diverse proprietăți cu ușurință.

Cum să lucrezi cu metadatele documentelor PDF prin API C++?

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(())
}
 Română