Безкоштовна бібліотека C++ для відображення сторінок PDF у зображення та витягування тексту.
Бібліотека з відкритим кодом на C++ для обробки PDF, що дозволяє відображати сторінки PDF у зображення, витягувати текст, працювати з PDF, захищеними паролем, та отримувати метадані документу через C++ API.
Що таке PDFium-Render?
Обробка та рендеринг PDF у C++‑застосунку історично був складним завданням, часто вимагав дорогих комерційних ліцензій або громіздких інструментів з відкритим кодом. На допомогу приходить 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(())
}