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

Gratis C++-bibliotek til at render PDF-sider til billeder og udtrække tekst.

Open source C++ PDF-behandlingsbibliotek til at render PDF-sider til billeder, udtrække tekst, arbejde med adgangskodebeskyttede PDF'er og få adgang til dokumentmetadata via C++-API.

Hvad er PDFium-Render?

Håndtering og rendering af PDF'er i en C++-applikation har historisk set været en kompleks udfordring, ofte med dyre kommercielle licenser eller besværlige open-source værktøjer. Mød PDFium-Render, et moderne, header-only C++-wrapperbibliotek, der bringer kraften fra Googles PDFium-motor til dine projekter med en intuitiv og ren grænseflade. PDFium-render er en sikker, idiomatisk Rust-binding til PDFium, den samme PDF-renderingsmotor, der driver Google Chrome og Mozilla Firefox. Skabt og vedligeholdt af ajrcarey, giver dette bibliotek udviklere et kraftfuldt værktøjssæt til at renderere PDF-sider til billeder, udtrække tekst, manipulere PDF-strukturer og få adgang til dokumentmetadata – alt sammen mens man udnytter Rusts hukommelsessikkerhedsgarantier.

I modsætning til mange PDF-biblioteker, der kun fokuserer på oprettelse eller grundlæggende parsing, udmærker PDFium-Render sig ved at gengive PDF-indhold med pixel-perfekt nøjagtighed, hvilket gør det ideelt til applikationer, der skal vise, konvertere eller behandle eksisterende PDF-dokumenter. Det understøtter forskellige grundlæggende og avancerede funktioner til arbejde med PDF-dokumenter, såsom gengivelse af PDF-filer og -sider, tekstudtrækning og -analyse, arbejde med dokumentmetadata, adgang til og manipulation af sideobjekter, håndtering af adgangskodebeskyttede PDF'er og meget mere. En af pdfium-renders største styrker er dens tværplatformsupport. Biblioteket fungerer problemfrit på Windows, macOS og Linux og abstraherer platformsspecifikke forskelle i PDFium-binærfiler. Uanset om du bygger en dokumentfremviser, automatiserer PDF-behandlingsarbejdsgange eller udtrækker data fra PDF'er, leverer pdfium-render de værktøjer, du har brug for.

Previous Next

Kom i gang med PDFium-Render

Den anbefalede måde at installere PDFium-Render på er ved at bruge CMake. Brug venligst følgende kommando for en problemfri installation.

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; download de seneste udgivelsesfiler direkte fra GitHub-arkivet.

Højpræcis PDF-gengivelse via C++

Den open source PDFium-Render biblioteks primære styrke ligger i dens renderingskapaciteter. Den kan konvertere PDF-sider til rasterbilleder med enestående kvalitet og understøtter forskellige outputformater, herunder PNG, JPEG og BMP. Renderingsmotoren håndterer komplekse PDF-funktioner som gennemsigtighed, gradienter, indlejrede skrifttyper og vektorgrafik med den samme nøjagtighed, som du ville forvente af Chromes PDF-fremviser. Her er et enkelt eksempel, der viser, hvordan softwareudviklere kan renderere en specifik side til PNG-billedformat i C++-applikationer.

Hvordan renderes en specifik 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(())
}

Tekstudtrækning og analyse via C++-biblioteket

Udover rendering leverer PDFium-Render-biblioteket omfattende tekstudtrækningsfunktioner. Tekstudtræknings-API'en er intuitiv og kraftfuld. Softwareudviklere kan udtrække tekst fra individuelle sider, søge efter specifikke strenge og endda få adgang til tegnniveau positioneringsinformation med blot et par linjer kode — afgørende for at implementere funktioner som tekstmarkering eller fremhævning. Det følgende eksempel viser, hvordan softwareudviklere kan udtrække tekst fra specifikke PDF-sideområder i C++-applikationer.

Hvordan udtrækker man tekst fra specifikke PDF-sideområ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 adgangskodebeskyttet PDF via C++

Sikkerhed er altafgørende, når man arbejder med dokumenter. PDFium-Render håndterer password-beskyttede PDF-filer problemfrit og understøtter både bruger- og ejeradgangskoder. Biblioteket håndterer godkendelse transparent og returnerer passende fejl, hvis adgangskoden er forkert, eller hvis PDF'en har begrænsninger, der forhindrer visse handlinger. Her er et meget nyttigt eksempel, der viser, hvordan man håndterer password-beskyttede PDF-dokumenter i C++-applikationer.

Hvordan åbner og indlæser man adgangskodebeskyttede 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(())
}

Arbejde med PDF-metadata og egenskaber via C++

At forstå en PDF's struktur er essentielt for mange applikationer. Det open source PDFium-Render-bibliotek giver fuld adgang til dokumentmetadata, sideantal, dimensioner og andre egenskaber. Denne funktionalitet er uvurderlig til at bygge dokumenthåndteringssystemer, PDF-validatorer eller enhver applikation, der skal kategorisere eller behandle PDF'er baseret på deres egenskaber. Det følgende kodeeksempel demonstrerer, hvordan programmører kan arbejde med PDF-dokumenters metadata og nemt få adgang til forskellige egenskaber med lethed.

Hvordan arbejder man med PDF-dokumenters metadata 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(())
}
 Dansk