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

Gratis C++-bibliotek for å gjengi PDF-sider til bilde og ekstrahere tekst.

Åpen kildekode C++ PDF-behandlingsbibliotek for å gjengi PDF-sider til bilder, ekstrahere tekst, arbeide med passordbeskyttede PDF-filer og få tilgang til dokumentmetadata via C++-API.

Hva er PDFium-Render?

Håndtering og rendering av PDF-er i en C++-applikasjon har historisk vært en kompleks utfordring, ofte med dyre kommersielle lisenser eller tungvinte open‑source‑verktøy. Møt PDFium-Render, et moderne, header‑only C++‑wrapperbibliotek som bringer kraften i Googles PDFium‑motor til prosjektene dine med et intuitivt og rent grensesnitt. PDFium-render er en sikker, idiomatisk Rust‑binding for PDFium, den samme PDF‑renderingsmotoren som driver Google Chrome og Mozilla Firefox. Skapt og vedlikeholdt av ajrcarey, gir dette biblioteket utviklere et kraftig verktøysett for å rendre PDF‑sider til bilder, trekke ut tekst, manipulere PDF‑strukturer og få tilgang til dokumentmetadata – alt mens du utnytter Rusts minnesikkerhetsgarantier.

I motsetning til mange PDF-biblioteker som kun fokuserer på opprettelse eller enkel parsing, utmerker PDFium-Render seg i å gjengi PDF-innhold med piksel-perfekt nøyaktighet, noe som gjør det ideelt for applikasjoner som trenger å vise, konvertere eller behandle eksisterende PDF-dokumenter. Den støtter ulike grunnleggende og avanserte funksjoner for arbeid med PDF-dokumenter, som å gjengi PDF-filer og sider, tekstuttrekk og analyse, arbeid med dokumentmetadata, tilgang til og manipulering av sideobjekter, håndtering av passordbeskyttede PDF-er, og mer. En av pdfium-renders største styrker er dens plattformuavhengige støtte. Biblioteket fungerer sømløst på Windows, macOS og Linux, og abstraherer bort plattformspesifikke forskjeller i PDFium-binærfiler. Enten du bygger en dokumentviser, automatiserer PDF-behandlingsarbeidsflyter, eller ekstraherer data fra PDF-er, gir pdfium-render verktøyene du trenger.

Previous Next

Kom i gang med PDFium-Render

Den anbefalte måten å installere PDFium-Render på er ved å bruke CMake. Vennligst bruk følgende kommando for en smidig installasjon.

Installer PDFium-Render via GitHub

 vcpkg install pdfium-render

Installer PDFium-Render via GitHub

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

Du kan også installere det manuelt; last ned de nyeste utgivelsesfilene direkte fra GitHub-repositoriet.

Høyoppløselig PDF-gjengivelse via C++

Den åpne kildekode PDFium-Render-bibliotekets primære styrke ligger i dets renderingskapasiteter. Den kan konvertere PDF-sider til rasterbilder med eksepsjonell kvalitet, og støtter ulike utdataformater inkludert PNG, JPEG og BMP. Renderingsmotoren håndterer komplekse PDF-funksjoner som gjennomsiktighet, gradienter, innebygde skrifttyper og vektorgrafikk med samme nøyaktighet som du ville forvente fra Chrome sin PDF-viser. Her er et enkelt eksempel som viser hvordan programvareutviklere kan gjengi en spesifikk side til PNG-bildeformat i C++-applikasjoner.

Hvordan gjengi en spesifikk PDF-side til PNG-format 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(())
}

Tekstuttrekk og analyse via C++-bibliotek

Utover rendering gir PDFium-Render-biblioteket omfattende tekstuttrekksfunksjoner. Tekstuttrekk-API-et er intuitivt og kraftig. Programvareutviklere kan trekke ut tekst fra individuelle sider, søke etter spesifikke strenger, og til og med få tilgang til tegnnivå-posisjonsinformasjon med bare noen få linjer kode — avgjørende for å implementere funksjoner som tekstvalg eller utheving. Det følgende ek

Hvordan trekke ut tekst fra spesifikke PDF-siderområder via 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 med passordbeskyttet PDF via C++

Sikkerhet er avgjørende når man arbeider med dokumenter. PDFium-Render håndterer passordbeskyttede PDF-filer sømløst, og støtter både bruker- og eierpassord. Biblioteket håndterer autentisering transparent og returnerer passende feil hvis passordet er feil eller hvis PDF-en har restriksjoner som hindrer visse operasjoner. Her er et svært nyttig eksempel som viser hvordan man håndterer passordbeskyttede PDF-dokumenter i C++-applikasjoner.

Hvordan åpne og laste inn passordbeskyttede PDF-dokumenter via 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(())
}

Arbeide med PDF-metadata og egenskaper via C++

Å forstå strukturen i en PDF er essensielt for mange applikasjoner. Det åpne kildekodebiblioteket PDFium-Render gir full tilgang til dokumentmetadata, sideantall, dimensjoner og andre egenskaper. Denne funksjonaliteten er uvurderlig for å bygge dokumenthåndteringssystemer, PDF-validerere eller enhver applikasjon som trenger å kategorisere eller behandle PDF-er basert på deres egenskaper. Følgende kodeeksempel demonstrerer hvordan programmerere kan arbeide med PDF-dokumentmetadata og enkelt få tilgang til ulike egenskaper.

Hvordan arbeide med metadata for PDF-dokumenter via 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(())
}
 Norsk