Geração de PDF em Rust: visão geral de bibliotecas e ferramentas
Rust é uma linguagem de programação de sistemas moderna, cada vez mais usada para criar aplicações servidoras de alto desempenho, incluindo a geração de documentos. Neste artigo, veremos as principais bibliotecas para criar arquivos PDF em Rust, suas funcionalidades, exemplos de uso e recomendações de escolha.
Principais bibliotecas para trabalhar com PDF em Rust
O ecossistema Rust oferece várias soluções maduras para geração de PDF. Vejamos as mais populares:
- printpdf — biblioteca de baixo nível com suporte a gráficos vetoriais, imagens e fontes.
- genpdf — biblioteca de alto nível para criação de documentos com API simples.
- pdf_writer — gerador de PDF rápido e seguro com dependências mínimas.
- wkhtmltopdf — wrapper para o utilitário wkhtmltopdf para converter HTML em PDF.
Biblioteca printpdf
printpdf é uma das bibliotecas mais populares para geração de PDF em Rust. Ela fornece controle total sobre o conteúdo do documento: texto, linhas, retângulos, imagens e fontes incorporadas.
Instalação
[dependencies]printpdf = "0.7"Exemplo: criando um PDF simples com texto
use printpdf::*;use std::fs::File;use std::io::BufWriter;
fn main() { // Criamos um documento no formato A4 let (doc, page1, layer1) = PdfDocument::new( "Documento de exemplo", Mm(210.0), Mm(297.0), "Layer 1" );
// Obtemos a fonte atual (incorporada) let font = doc.add_builtin_font(BuiltinFont::Helvetica).unwrap();
// Desenhamos o texto let current_layer = doc.get_page(page1).get_layer(layer1); current_layer.use_text( "Olá, mundo PDF do Rust!", 24.0, Mm(20.0), Mm(270.0), &font );
// Salvamos no arquivo let file = File::create("example.pdf").unwrap(); let writer = BufWriter::new(file); doc.save(&mut std::io::BufWriter::new(writer)).unwrap();}Biblioteca genpdf
genpdf fornece uma API de nível mais alto, semelhante ao trabalho com processadores de texto. Suporta parágrafos, tabelas, cabeçalhos e quebra automática de linhas.
Instalação
[dependencies]genpdf = "0.2"Exemplo: criando um documento com cabeçalho e tabela
use genpdf::{Document, SimplePageSettings};use genpdf::elements::{Paragraph, Table, TableLayout};use genpdf::fonts::FontFamily;
fn main() -> Result<(), Box> { // Carregamos a fonte (por exemplo, DejaVu Sans) let font_family = FontFamily::from_files( "/usr/share/fonts/truetype/dejavu/", "DejaVuSans", None )?;
// Criamos o documento let mut doc = Document::new(font_family, SimplePageSettings::a4());
// Adicionamos o cabeçalho doc.push(Paragraph::new("Relatório de Vendas").aligned(genpdf::Alignment::Center));
// Criamos a tabela let mut table = Table::new(TableLayout::new(vec![2, 3, 2])); table.row() .element(Paragraph::new("Produto")) .element(Paragraph::new("Quantidade")) .element(Paragraph::new("Preço")); table.row() .element(Paragraph::new("Notebook")) .element(Paragraph::new("10")) .element(Paragraph::new("50 000 RUB")); table.row() .element(Paragraph::new("Mouse")) .element(Paragraph::new("50")) .element(Paragraph::new("1 500 RUB"));
doc.push(table);
// Salvamos doc.render_to_file("report.pdf")?; Ok(())} Biblioteca pdf_writer
pdf_writer é uma biblioteca minimalista e rápida, focada em trabalho de baixo nível com estruturas PDF. V
Também na biblioteca
Internacionalização (i18n) em C++: guia completo com gettext e ICU
Melhores bibliotecas de logging para Go (Golang): visão geral e comparação
Parsing de HTML em Java: bibliotecas Jsoup e HtmlUnit
Trabalhando com datas em TypeScript: bibliotecas populares e exemplos