1. Des produits
  2.   PDF
  3.   C++
  4.   PDFium-Render
 
  

Bibliothèque C++ gratuite pour rendre les pages PDF en image et extraire le texte.

Bibliothèque C++ open source de traitement PDF pour rendre les pages PDF en images, extraire le texte, travailler avec des PDF protégés par mot de passe et accéder aux métadonnées du document via l'API C++.

Qu'est-ce que PDFium-Render ?

La gestion et le rendu des PDF dans une application C++ ont historiquement été un défi complexe, impliquant souvent des licences commerciales coûteuses ou des outils open source lourds. Voici PDFium-Render, une bibliothèque moderne, uniquement d’en-têtes, qui enveloppe le moteur PDFium de Google et l’apporte à vos projets avec une interface intuitive et épurée. PDFium-render est une liaison Rust sûre et idiomatique pour PDFium, le même moteur de rendu PDF qui alimente Google Chrome et Mozilla Firefox. Créée et maintenue par ajrcarey, cette bibliothèque offre aux développeurs une boîte à outils puissante pour rendre les pages PDF en images, extraire du texte, manipuler les structures PDF et accéder aux métadonnées du document — le tout en tirant parti des garanties de sécurité mémoire de Rust.

Contrairement à de nombreuses bibliothèques PDF qui se concentrent uniquement sur la création ou l'analyse de base, PDFium-Render excelle dans le rendu du contenu PDF avec une précision pixel-perfect, ce qui le rend idéal pour les applications qui doivent afficher, convertir ou traiter des documents PDF existants. Il prend en charge diverses fonctionnalités de base et avancées pour travailler avec les documents PDF, telles que le rendu de fichiers et de pages PDF, l'extraction et l'analyse de texte, la gestion des métadonnées du document, l'accès et la manipulation des objets de page, le travail avec des PDF protégés par mot de passe, et bien plus encore. L'un des plus grands atouts de pdfium-render est son support multiplateforme. La bibliothèque fonctionne de manière transparente sur Windows, macOS et Linux, en masquant les différences spécifiques aux plateformes dans les binaires PDFium. Que vous construisiez un visualiseur de documents, automatisiez des flux de travail de traitement PDF ou extrayiez des données de PDF, pdfium-render fournit les outils dont vous avez besoin.

Previous Next

Premiers pas avec PDFium-Render

La façon recommandée d'installer PDFium-Render est d'utiliser CMake. Veuillez utiliser la commande suivante pour une installation fluide.

Installer PDFium-Render via GitHub

 vcpkg install pdfium-render

Installer PDFium-Render via GitHub

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

Vous pouvez également l'installer manuellement ; téléchargez les derniers fichiers de version directement depuis le dépôt GitHub.

Rendu PDF haute fidélité via C++

La principale force de la bibliothèque open source PDFium-Render réside dans ses capacités de rendu. Elle peut convertir des pages PDF en images raster avec une qualité exceptionnelle, prenant en charge divers formats de sortie, notamment PNG, JPEG et BMP. Le moteur de rendu gère des fonctionnalités PDF complexes telles que la transparence, les dégradés, les polices intégrées et les graphiques vectoriels avec la même précision que l'on attend du visualiseur PDF de Chrome. Voici un exemple simple qui montre comment les développeurs peuvent rendre une page spécifique au format d'image PNG dans des applications C++.

Comment rendre une page PDF spécifique au format PNG via 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(())
}

Extraction et analyse de texte via la bibliothèque C++

Au-delà du rendu, la bibliothèque PDFium-Render offre des capacités d'extraction de texte complètes. L'API d'extraction de texte est intuitive et puissante. Les développeurs peuvent extraire du texte à partir de pages individuelles, rechercher des chaînes spécifiques, et même accéder aux informations de positionnement au niveau des caractères avec seulement quelques lignes de code — essentiel pour implémenter des fonctionnalités telles que la sélection ou la mise en surbrillance du texte. L'exemple suivant montre comment les développeurs peuvent extraire du texte de régions spécifiques de pages PDF dans des applications C++.

Comment extraire du texte à partir de régions spécifiques de pages PDF via l'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 avec PDF protégé par mot de passe via C++

La sécurité est primordiale lors de la manipulation de documents. PDFium-Render gère les PDF protégés par mot de passe de manière transparente, en prenant en charge les mots de passe utilisateur et propriétaire. La bibliothèque gère l'authentification de façon transparente, renvoyant les erreurs appropriées si le mot de passe est incorrect ou si le PDF comporte des restrictions empêchant certaines opérations. Voici un exemple très utile qui montre comment gérer les documents PDF protégés par mot de passe dans des applications C++.

Comment ouvrir et charger des documents PDF protégés par mot de passe via l'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(())
}

Métadonnées et propriétés PDF fonctionnelles via C++

Comprendre la structure d'un PDF est essentiel pour de nombreuses applications. La bibliothèque open source PDFium-Render offre un accès complet aux métadonnées du document, au nombre de pages, aux dimensions et à d'autres propriétés. Cette fonctionnalité est inestimable pour créer des systèmes de gestion de documents, des validateurs de PDF ou toute application qui doit catégoriser ou traiter les PDF en fonction de leurs propriétés. L'exemple de code suivant montre comment les programmeurs peuvent travailler avec les métadonnées des documents PDF et accéder facilement à diverses propriétés.

Comment travailler avec les métadonnées des documents PDF via l'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(())
}
 Français