Бесплатная библиотека C++ для рендеринга страниц PDF в изображения и извлечения текста.
Открытая библиотека C++ для обработки PDF, позволяющая рендерить страницы PDF в изображения, извлекать текст, работать с PDF, защищёнными паролем, и получать доступ к метаданным документа через C++ API.
Что такое PDFium-Render?
Обработка и рендеринг PDF в C++ приложении исторически был сложной задачей, часто требующей дорогих коммерческих лицензий или громоздких open‑source инструментов. Представляем PDFium-Render — современную библиотеку‑обёртку только с заголовками для C++, которая приносит мощность движка PDFium от Google в ваши проекты через интуитивный и чистый интерфейс. PDFium-render — безопасная, идиоматичная привязка PDFium для Rust, тот же движок рендеринга 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 предоставляет необходимые инструменты.
Начало работы с 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(())
}