Biblioteca C++ gratuita para renderizar páginas PDF em imagem e extrair texto.
Biblioteca de processamento PDF em C++ de código aberto para renderizar páginas PDF em imagens, extrair texto, trabalhar com PDFs protegidos por senha e acessar metadados do documento via API C++.
O que é PDFium-Render?
Manipular e renderizar PDFs dentro de uma aplicação C++ tem sido historicamente um desafio complexo, frequentemente envolvendo licenças comerciais caras ou ferramentas de código aberto complicadas. Apresentamos o PDFium-Render, uma biblioteca moderna, apenas de cabeçalho, que envolve C++ e traz o poder do motor PDFium do Google para seus projetos com uma interface intuitiva e limpa. PDFium-render é uma ligação segura e idiomática em Rust para o PDFium, o mesmo motor de renderização de PDF que alimenta o Google Chrome e o Mozilla Firefox. Criada e mantida por ajrcarey, esta biblioteca oferece aos desenvolvedores um conjunto poderoso de ferramentas para renderizar páginas PDF em imagens, extrair texto, manipular estruturas de PDF e acessar metadados de documentos — tudo isso aproveitando as garantias de segurança de memória do Rust.
Diferente de muitas bibliotecas PDF que se concentram apenas na criação ou em parsing básico, o PDFium-Render se destaca na renderização de conteúdo PDF com precisão pixel-perfeita, tornando-o ideal para aplicações que precisam exibir, converter ou processar documentos PDF existentes. Ele suporta vários recursos básicos e avançados para trabalhar com documentos PDF, como renderização de arquivos e páginas PDF, extração e análise de texto, trabalho com metadados de documentos, acesso e manipulação de objetos de página, trabalho com PDFs protegidos por senha, e muito mais. Uma das maiores forças do pdfium-render é seu suporte multiplataforma. A biblioteca funciona perfeitamente no Windows, macOS e Linux, abstraindo as diferenças específicas de cada plataforma nos binários do PDFium. Seja construindo um visualizador de documentos, automatizando fluxos de trabalho de processamento de PDF ou extraindo dados de PDFs, o pdfium-render fornece as ferramentas que você precisa.
Começando com PDFium-Render
A forma recomendada de instalar o PDFium-Render é usando CMake. Por favor, use o comando a seguir para uma instalação tranquila.
Instalar PDFium-Render via GitHub
vcpkg install pdfium-render
Instalar PDFium-Render via GitHub
Git clone https://github.com/ajrcarey/pdfium-render.git Você também pode instalá‑lo manualmente; baixe os arquivos da versão mais recente diretamente do repositório GitHub.
Renderização de PDF de Alta Fidelidade via C++
A principal força da biblioteca de código aberto PDFium-Render reside em suas capacidades de renderização. Ela pode converter páginas PDF em imagens raster com qualidade excepcional, suportando vários formatos de saída, incluindo PNG, JPEG e BMP. O motor de renderização lida com recursos complexos de PDF, como transparência, gradientes, fontes incorporadas e gráficos vetoriais com a mesma precisão que você esperaria do visualizador de PDF do Chrome. Aqui está um exemplo simples que mostra como desenvolvedores de software podem renderizar uma página específica em formato de imagem PNG dentro de aplicações C++.\n\n\n
Como Renderizar uma Página PDF Específica no Formato PNG via C++?
\nuse pdfium_render::prelude::*;\n\nfn render_pdf_page() -> Result<(), PdfiumError> {\n // Initialize PDFium library\n let pdfium = Pdfium::new(\n Pdfium::bind_to_library(Pdfium::pdfium_platform_library_name_at_path(\"./\"))\n .or_else(|_| Pdfium::bind_to_system_library())?\n );\n \n // Load a PDF document\n let document = pdfium.load_pdf_from_file(\"sample.pdf\", None)?;\n \n // Get the first page\n let page = document.pages().get(0)?;\n \n // Render the page to a bitmap at 300 DPI\n let bitmap = page.render_with_config(\n &PdfRenderConfig::new()\n .set_target_width(2480) // 300 DPI for 8.27 inches\n .set_target_height(3508) // 300 DPI for 11.69 inches\n )?;\n \n // Save as PNG\n bitmap.as_image().as_rgba8().unwrap()\n .save(\"output.png\")?;\n \n Ok(())\n}\n\nExtração e Análise de Texto via Biblioteca C++
\nAlém da renderização, a biblioteca PDFium-Render oferece recursos abrangentes de extração de texto. A API de extração de texto é intuitiva e poderosa. Desenvolvedores de software podem extrair texto de páginas individuais, buscar strings específicas e até acessar informações de posicionamento a nível de caractere com apenas algumas linhas de código — crucial para implementar recursos como seleção ou realce de texto. O exemplo a seguir mostra como desenvolvedores de software podem extrair texto de regiões específicas de páginas PDF dentro de aplicações C++.
Como Extrair Texto de Regiões Específicas de Páginas PDF via 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 com PDF Protegido por Senha via C++
A segurança é fundamental ao trabalhar com documentos. O PDFium-Render lida com PDFs protegidos por senha de forma transparente, suportando tanto senhas de usuário quanto de proprietário. A biblioteca gerencia a autenticação de maneira transparente, retornando erros apropriados se a senha estiver incorreta ou se o PDF possuir restrições que impeçam certas operações. Aqui está um exemplo muito útil que mostra como lidar com documentos PDF protegidos por senha em aplicações C++.
Como Abrir e Carregar Documentos PDF Protegidos por Senha via 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(())
}
Trabalhando com Metadados e Propriedades de PDF via C++
Entender a estrutura de um PDF é essencial para muitas aplicações. A biblioteca de código aberto PDFium-Render fornece acesso completo aos metadados do documento, contagem de páginas, dimensões e outras propriedades. Essa funcionalidade é inestimável para construir sistemas de gerenciamento de documentos, validadores de PDF ou qualquer aplicação que precise categorizar ou processar PDFs com base em suas propriedades. O exemplo de código a seguir demonstra como os programadores podem trabalhar com os metadados de documentos PDF e acessar várias propriedades com facilidade.
Como Trabalhar com Metadados de Documentos PDF via 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(())
}