1. Продукти
  2.   PDF
  3.   C++
  4.   PDFium-Render
 
  

Безплатна C++ библиотека за рендериране на PDF страници в изображение и извличане на текст.

Отворена C++ библиотека за обработка на PDF за рендериране на PDF страници в изображения, извличане на текст, работа с защитени с парола PDF файлове и достъп до метаданни на документа чрез C++ API.

Какво е PDFium-Render?

Работата с PDF файлове и тяхното рендериране в C++ приложение традиционно е сложен проблем, често изискващ скъпи комерсиални лицензи или неудобни инструменти с отворен код. Представяме PDFium-Render – съвременна, само‑заглавна C++ обвивка, която носи мощността на PDFium двигателя на Google във вашите проекти с интуитивен и чист интерфейс. PDFium-render е безопасна, идиоматична Rust привързаност към PDFium, същият двигател за рендериране на PDF, който захранва Google Chrome и Mozilla Firefox. Създадена и поддържана от ajrcarey, тази библиотека предоставя на разработчиците мощен набор от инструменти за рендериране на PDF страници към изображения, извличане на текст, манипулиране на PDF структури и достъп до метаданните на документа – всичко това, докато се възползвате от гаранциите за безопасност на паметта в Rust.

За разлика от много PDF библиотеки, които се фокусират единствено върху създаването или базовото парсиране, PDFium-Render се отличава в рендерирането на PDF съдържание с пикселно съвършена точност, което го прави идеален за приложения, които трябва да показват, конвертират или обработват съществуващи PDF документи. Той поддържа различни базови и разширени функции за работа с PDF документи, като рендериране на PDF файлове и страници, извличане и анализ на текст, работа с метаданни на документа, достъп и манипулиране на обекти от страницата, работа с пароли защитени PDF файлове и още повече. Една от най-големите силни страни на pdfium-render е поддръжката му за различни платформи. Библиотеката работи безпроблемно на Windows, macOS и Linux, абстрахирайки специфичните за платформата разлики в PDFium бинарните файлове. Независимо дали създавате преглед на документи, автоматизирате процеси за обработка на PDF или извличате данни от PDF‑ове, pdfium-render предоставя необходимите инструменти.

Previous Next

Започване с PDFium-Render

Препоръчителният начин за инсталиране на PDFium-Render е чрез CMake. Моля, използвайте следната команда за гладка инсталация.

Инсталиране на PDFium-Render чрез GitHub

 vcpkg install pdfium-render

Инсталиране на PDFium-Render чрез GitHub

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

Можете също да го инсталирате ръчно; изтеглете последните файлове за издание директно от GitHub хранилище.

Висококачествено рендиране на PDF чрез C++

Основната сила на отворения код PDFium-Render библиотека се състои в нейните възможности за рендериране. Тя може да конвертира PDF страници в растерни изображения с изключително качество, поддържайки различни изходни формати, включително PNG, JPEG и BMP. Рендериращият двигател обработва сложни PDF функции като прозрачност, градиенти, вградени шрифтове и векторна графика със същата точност, каквато бихте очаквали от PDF прегледача на Chrome. Ето прост пример, който показва как софтуерните разработчици могат да рендерират конкретна страница в PNG формат в C++ приложения.

Как да рендерираме конкретна PDF страница в PNG формат чрез 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(())
}

Извличане на текст и анализ чрез C++ библиотека

Освен рендерирането, PDFium-Render библиотеката предоставя пълни възможности за извличане на текст. API‑то за извличане на текст е интуитивно и мощно. Софтуерните разработчици могат да извличат текст от отделни страници, да търсят конкретни низове и дори да получават информация за позиционирането на знаците на ниво символ с няколко реда код — от съществено значение за реализиране на функции като избор на текст или маркиране. Следният пример показва как софтуерните разработчици могат да извличат текст от конкретни региони на PDF страници в C++ приложения.

Как да извлечете текст от конкретни региони на PDF страници чрез 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 с PDF, защитен с парола, чрез C++

Сигурността е от първостепенно значение при работа с документи. PDFium-Render безпроблемно обработва PDF файлове, защитени с парола, като поддържа както потребителски, така и собственически пароли. Библиотеката обработва удостоверяването прозрачно, връщайки подходящи грешки, ако паролата е неправилна или ако PDF‑тът има ограничения, които пречат на определени операции. Ето много полезен пример, който показва как да се работи с PDF документи, защитени с парола, в C++ приложения.

Как да отворите и заредите PDF документи, защитени с парола, чрез 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(())
}

Работа с метаданни и свойства на PDF чрез C++

Разбирането на структурата на PDF е от съществено значение за много приложения. Отворената библиотека PDFium-Render предоставя пълен достъп до метаданните на документа, броя на страниците, размерите и други свойства. Тази функционалност е безценна за създаване на системи за управление на документи, PDF валидатори или всяко приложение, което трябва да категоризира или обработва PDF‑файлове въз основа на техните свойства. Следният пример с код демонстрира как програмистите могат лесно да работят с метаданните на PDF документи и да достъпват различни свойства.

Как да работите с метаданните на PDF документи чрез 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(())
}
 Български