Geração de PDF em Rust: visão geral das bibliotecas e exemplos de código

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 das bibliotecas e exemplos práticos



Rust é uma linguagem de programação de sistemas que está sendo cada vez mais usada para criar aplicações servidoras de alto desempenho, serviços web e ferramentas de linha de comando. Uma das tarefas comuns no desenvolvimento de tais projetos é a geração de documentos PDF: relatórios, faturas, certificados ou simplesmente arquivos de texto com formatação. Neste artigo, vamos analisar as principais bibliotecas para trabalhar com PDF em Rust, seus recursos, exemplos de código e critérios de escolha.



Bibliotecas populares para geração de PDF em Rust



Atualmente, no ecossistema Rust, podemos destacar três bibliotecas principais que são ativamente mantidas e usadas pela comunidade:



  • printpdf — biblioteca de baixo nível para criação de documentos PDF com controle total sobre o conteúdo. Suporta texto, imagens, gráficos vetoriais, tabelas e incorporação de fontes.
  • genpdf — biblioteca de nível mais alto, construída sobre o printpdf. Fornece abstrações convenientes para trabalhar com texto, parágrafos, tabelas e estilos.
  • pdf_writer — outra biblioteca de baixo nível que foca no minimalismo e desempenho. Permite escrever arquivos PDF diretamente, mas exige um conhecimento profundo do formato PDF.


Biblioteca printpdf



printpdf é uma das bibliotecas mais populares para geração de PDF em Rust. Ela fornece uma API para trabalhar com primitivas gráficas, texto e fontes. Principais recursos:

  • Criação de documentos com várias páginas;
  • Incorporação de fontes TrueType/OpenType;
  • Desenho de linhas, retângulos, círculos e outras formas;
  • Inserção de imagens (PNG, JPEG);
  • Trabalho com cores e transparência;
  • Suporte a Unicode e cirílico.


Exemplo de criação de um PDF simples com texto usando printpdf:



use printpdf::*;use std::fs::File;use std::io::BufWriter;

fn main() { // Criando um documento no formato A4 let (doc, page1, layer1) = PdfDocument::new( "Exemplo de PDF em Rust", Mm(210.0), Mm(297.0), "Layer 1", );

// Obtendo a fonte atual (Helvetica embutida) let font = doc.add_builtin_font(BuiltinFont::Helvetica).unwrap();

// Usando a camada para desenhar let layer = doc.get_page(page1).get_layer(layer1);

// Adicionando texto layer.use_text("Olá, mundo! PDF a partir do Rust", 24.0, Mm(50.0), Mm(250.0), &font);

// Salvando o arquivo let file = File::create("hello.pdf").unwrap(); let writer = BufWriter::new(file); doc.save(&mut std::io::BufWriter::new(writer)).unwrap();}


Biblioteca genpdf



genpdf é um wrapper sobre o printpdf que fornece uma API de nível mais alto. É ideal para criar documentos com formatação simples: títulos, parágrafos, listas, tabelas. Principais vantagens:

  • Gerenciamento automático de quebras de página;
  • Suporte a estilos (negrito, itálico, sublinhado);
  • Suporte embutido para tabelas com células e bordas;
  • Interface simples para adicionar elementos.


Exemplo de criação de PDF com tabela usando genpdf:



use genpdf::*;use genpdf::elements::*;use std::fs::File;

fn main() { // Criando um documento let mut doc = Document::new("Liberation Serif") .expect("Falha ao carregar a fonte");

// Configuração do estilo padrão doc.set_title("Relatório de Vendas");

// Adicionando um parágrafo doc.push(Paragraph::new("Vendas por mês:"));

// Criando uma tabela let mut table = Table::new(vec![2, 3, 2]); table.set_cell_border_style(BorderStyle::Solid); table.push_row(vec![ "Mês".to_string(), "Receita, R$".to_stri

Recommendations