Darmowa biblioteka C++ do renderowania stron PDF do obrazu i wyodrębniania tekstu.
Otwarta biblioteka C++ do przetwarzania PDF, umożliwiająca renderowanie stron PDF do obrazów, wyodrębnianie tekstu, pracę z PDF‑ami zabezpieczonymi hasłem oraz dostęp do metadanych dokumentu poprzez API C++.
Czym jest PDFium-Render?
Obsługa i renderowanie plików PDF w aplikacji C++ od zawsze było skomplikowanym wyzwaniem, często wymagającym drogich licencji komercyjnych lub uciążliwych narzędzi open‑source. Przedstawiamy PDFium-Render, nowoczesną, jedynie nagłówkową bibliotekę opakowującą C++, która przenosi moc silnika PDFium od Google do Twoich projektów dzięki intuicyjnemu i czystemu interfejsowi. PDFium-render to bezpieczne, idiomatyczne wiązanie Rust dla PDFium, tego samego silnika renderującego PDF, który napędza Google Chrome i Mozilla Firefox. Stworzona i utrzymywana przez ajrcarey, biblioteka dostarcza programistom potężny zestaw narzędzi do renderowania stron PDF jako obrazów, wyodrębniania tekstu, manipulacji strukturami PDF oraz dostępu do metadanych dokumentu — wszystko to przy wykorzystaniu gwarancji bezpieczeństwa pamięci Rust.
W przeciwieństwie do wielu bibliotek PDF, które koncentrują się wyłącznie na tworzeniu lub podstawowym parsowaniu, PDFium-Render wyróżnia się renderowaniem treści PDF z dokładnością do pojedynczego piksela, co czyni go idealnym dla aplikacji, które muszą wyświetlać, konwertować lub przetwarzać istniejące dokumenty PDF. Obsługuje różnorodne podstawowe i zaawansowane funkcje pracy z dokumentami PDF, takie jak renderowanie plików i stron PDF, ekstrakcja i analiza tekstu, praca z metadanymi dokumentu, dostęp i manipulacja obiektami stron, obsługa PDF‑ów zabezpieczonych hasłem i wiele innych. Jedną z największych zalet pdfium-render jest wsparcie wieloplatformowe. Biblioteka działa płynnie na Windows, macOS i Linux, ukrywając różnice specyficzne dla platform w binariach PDFium. Niezależnie od tego, czy tworzysz przeglądarkę dokumentów, automatyzujesz przepływy pracy związane z przetwarzaniem PDF, czy wyodrębniasz dane z PDF‑ów, pdfium-render dostarcza niezbędne narzędzia.
Rozpoczęcie pracy z PDFium-Render
Zalecanym sposobem instalacji PDFium-Render jest użycie CMake. Proszę użyć poniższego polecenia, aby przeprowadzić płynną instalację.
Zainstaluj PDFium-Render przez GitHub
vcpkg install pdfium-render
Zainstaluj PDFium-Render przez GitHub
Git clone https://github.com/ajrcarey/pdfium-render.git Możesz również zainstalować go ręcznie; pobierz najnowsze pliki wydania bezpośrednio z repozytorium GitHub.
Renderowanie PDF o wysokiej wierności za pomocą C++
Główną siłą otwartoźródłowej biblioteki PDFium-Render są jej możliwości renderowania. Może konwertować strony PDF na obrazy rastrowe o wyjątkowej jakości, obsługując różne formaty wyjściowe, w tym PNG, JPEG i BMP. Silnik renderujący radzi sobie z zaawansowanymi funkcjami PDF, takimi jak przezroczystość, gradienty, osadzone czcionki i grafika wektorowa, z taką samą precyzją, jakiej można oczekiwać od przeglądarki PDF w Chrome. Oto prosty przykład, który pokazuje, jak programiści mogą renderować konkretną stronę do formatu obrazu PNG w aplikacjach C++.
Jak wyrenderować konkretną stronę PDF do formatu PNG w 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(())
}
Ekstrakcja i analiza tekstu przy użyciu biblioteki C++
Poza renderowaniem, biblioteka PDFium-Render oferuje kompleksowe możliwości ekstrakcji tekstu. API ekstrakcji tekstu jest intuicyjne i potężne. Programiści mogą wyodrębniać tekst z poszczególnych stron, wyszukiwać określone ciągi znaków oraz uzyskiwać informacje o pozycjonowaniu na poziomie znaków, używając zaledwie kilku linii kodu — co jest kluczowe przy implementacji funkcji takich jak zaznaczanie lub podświetlanie tekstu. Poniższy przykład pokazuje, jak programiści mogą wyodrębniać tekst z konkretnych obszarów stron PDF w aplikacjach C++.
Jak wyodrębnić tekst z określonych regionów stron PDF za pomocą API C++?
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 z zabezpieczonym hasłem plikiem PDF za pomocą C++
Bezpieczeństwo jest najważniejsze przy pracy z dokumentami. PDFium-Render obsługuje zabezpieczone hasłem pliki PDF bezproblemowo, wspierając zarówno hasła użytkownika, jak i właściciela. Biblioteka obsługuje uwierzytelnianie w sposób przejrzysty, zwracając odpowiednie błędy, jeśli hasło jest nieprawidłowe lub jeśli PDF ma ograniczenia uniemożliwiające niektóre operacje. Oto bardzo przydatny przykład, który pokazuje, jak obsługiwać zabezpieczone hasłem dokumenty PDF w aplikacjach C++.
Jak otworzyć i załadować zabezpieczone hasłem dokumenty PDF za pomocą API C++?
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(())
}
Obsługa metadanych i właściwości PDF za pomocą C++
Zrozumienie struktury PDF jest niezbędne dla wielu aplikacji. Biblioteka open source PDFium-Render zapewnia pełny dostęp do metadanych dokumentu, liczby stron, wymiarów i innych właściwości. Ta funkcjonalność jest nieoceniona przy tworzeniu systemów zarządzania dokumentami, walidatorów PDF lub dowolnej aplikacji, która musi kategoryzować lub przetwarzać pliki PDF na podstawie ich właściwości. Poniższy przykład kodu demonstruje, jak programiści mogą pracować z metadanymi dokumentów PDF i łatwo uzyskiwać dostęp do różnych właściwości.
Jak pracować z metadanymi dokumentów PDF za pomocą API C++?
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(())
}