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

Gratis C++‑bibliotek för att rendera PDF‑sidor till bild och extrahera text.

Open source C++ PDF‑bearbetningsbibliotek för att rendera PDF‑sidor till bilder, extrahera text, arbeta med lösenordsskyddade PDF‑filer och komma åt dokumentmetadata via C++‑API.

Vad är PDFium-Render?

Hantering och rendering av PDF-filer i en C++-applikation har historiskt varit en komplex utmaning, ofta med dyra kommersiella licenser eller besvärliga open‑source‑verktyg. Här kommer PDFium-Render, ett modernt, header‑only C++‑wrapperbibliotek som för med sig kraften i Googles PDFium‑motor till dina projekt med ett intuitivt och rent gränssnitt. PDFium-render är en säker, idiomatisk Rust‑bindning för PDFium, samma PDF‑renderingsmotor som driver Google Chrome och Mozilla Firefox. Skapat och underhållet av ajrcarey, ger detta bibliotek utvecklare ett kraftfullt verktyg för att rendera PDF‑sidor till bilder, extrahera text, manipulera PDF‑strukturer och komma åt dokumentmetadata – allt medan Rusts minnessäkerhetsgarantier utnyttjas.

Till skillnad från många PDF-bibliotek som enbart fokuserar på skapande eller grundläggande parsning, utmärker sig PDFium-Render i att rendera PDF-innehåll med pixelperfekt noggrannhet, vilket gör det idealiskt för applikationer som behöver visa, konvertera eller bearbeta befintliga PDF-dokument. Det stöder olika grundläggande och avancerade funktioner för att arbeta med PDF-dokument, såsom rendering av PDF-filer och sidor, textutdragning och analys, arbete med dokumentmetadata, åtkomst till och manipulation av sidobjekt, hantering av lösenordsskyddade PDF-filer och mycket mer. En av pdfium-renders största styrkor är dess plattformsoberoende stöd. Biblioteket fungerar sömlöst på Windows, macOS och Linux och abstraherar bort plattformspecifika skillnader i PDFium-binärer. Oavsett om du bygger en dokumentvisare, automatiserar PDF-bearbetningsarbetsflöden eller extraherar data från PDF-filer, så tillhandahåller pdfium-render verktygen du behöver.

Previous Next

Komma igång med PDFium-Render

TThe rekommenderade sättet att installera PDFium-Render är att använda CMake. Vänligen använd följande kommando för en smidig installation.

Installera PDFium-Render via GitHub

 vcpkg install pdfium-render

Installera PDFium-Render via GitHub

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

Du kan också installera det manuellt; ladda ner de senaste versionsfilerna direkt från GitHub-arkivet.

PDF-rendering med hög precision via C++

Det öppna källkods-biblioteket PDFium-Render:s främsta styrka ligger i dess renderingskapacitet. Det kan konvertera PDF-sidor till rasterbilder med exceptionell kvalitet och stödjer olika utdataformat inklusive PNG, JPEG och BMP. Renderingsmotorn hanterar komplexa PDF-funktioner som transparens, gradienter, inbäddade typsnitt och vektorgrafik med samma noggrannhet som du skulle förvänta dig av Chromes PDF-visare. Här är ett enkelt exempel som visar hur mjukvaruutvecklare kan rendera en specifik sida till PNG-bildformat i C++-applikationer.

Hur renderar man en specifik PDF-sida till 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(())
}

Textutdrag och analys via C++-biblioteket

Utöver rendering erbjuder PDFium-Render-biblioteket omfattande funktioner för textutdrag. Textutdrags-API:et är intuitivt och kraftfullt. Mjukvaruutvecklare kan extrahera text från enskilda sidor, söka efter specifika strängar och till och med få åtkomst till teckenpositionsinformation med bara ett par kodrader — avgörande för att implementera funktioner som textmarkering eller markering. Följande exempel visar hur mjukvaruutvecklare kan extrahera text från specifika PDF-sidområden i C++-applikationer.

Hur extraherar man text från specifika PDF-sidområden 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 lösenordsskyddad PDF via C++

Säkerhet är av största vikt när man arbetar med dokument. PDFium-Render hanterar lösenordsskyddade PDF-filer sömlöst och stödjer både användar- och ägarlösenord. Biblioteket hanterar autentisering transparent och returnerar lämpliga fel om lösenordet är felaktigt eller om PDF-filen har begränsningar som förhindrar vissa operationer. Här är ett mycket användbart exempel som visar hur man hanterar lösenordsskyddade PDF-dokument i C++-applikationer.

Hur öppnar och laddar man lösenordsskyddade PDF-dokument 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(())
}

Arbeta med PDF-metadata och egenskaper via C++

Att förstå en PDF:s struktur är avgörande för många applikationer. Det öppna källkods-biblioteket PDFium-Render ger fullständig åtkomst till dokumentmetadata, sidantal, dimensioner och andra egenskaper. Denna funktionalitet är ovärderlig för att bygga dokumenthanteringssystem, PDF-validerare eller någon applikation som behöver kategorisera eller bearbeta PDF-filer baserat på deras egenskaper. Följande kodexempel visar hur programmerare kan arbeta med PDF-dokumentmetadata och enkelt komma åt olika egenskaper.

Hur arbetar man med PDF-dokumentmetadata 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(())
}
 Svenska