Geração de PDF em Rust: visão geral de bibliotecas e ferramentas

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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

Recommendations