Geração de relatórios PDF em Rust: bibliotecas e exemplos práticos

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 relatórios PDF em Rust: visão geral das bibliotecas e exemplos práticos



Rust é uma linguagem de programação de sistemas moderna que está ganhando popularidade no desenvolvimento web, inclusive para criação de aplicações servidoras e ferramentas de geração de documentos. Se você precisa gerar relatórios PDF em Rust, está no lugar certo. Neste artigo, veremos as principais bibliotecas para trabalhar com PDF, suas funcionalidades e apresentaremos exemplos práticos de código.



Por que gerar PDF em Rust?

PDF é um formato universal para troca de documentos, relatórios e faturas. Rust oferece:

  • Alto desempenho e baixo consumo de memória.
  • Segurança no gerenciamento de memória sem coletor de lixo.
  • Fácil integração com frameworks web (Actix, Rocket, Axum).
  • Multiplataforma (Windows, Linux, macOS).


Principais bibliotecas para PDF em Rust



1. printpdf — trabalho de baixo nível com PDF

printpdf é a biblioteca mais popular para criar documentos PDF "do zero". Ela permite desenhar linhas, texto, imagens e tabelas, controlando cada pixel. Adequada para relatórios complexos com layout personalizado.



Instalação:

[dependencies]printpdf = "0.7"


Exemplo: PDF simples com texto

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

fn main() { let (doc, page1, layer1) = PdfDocument::new( "Meu primeiro relatório", Mm(210.0), Mm(297.0), "Layer 1", );

let font = doc.add_builtin_font(BuiltinFont::Helvetica).unwrap();

let current_layer = doc.get_page(page1).get_layer(layer1); current_layer.use_text("Olá, mundo!", 24.0, Mm(20.0), Mm(280.0), &font);

doc.save(&mut File::create("output.pdf").unwrap()).unwrap();}


2. genpdf — geração de relatórios de alto nível

genpdf é construído sobre o printpdf e fornece uma API conveniente para criar documentos com tabelas, cabeçalhos, parágrafos e estilos. Ideal para relatórios onde a estrutura é importante, e não o posicionamento manual.



Instalação:

[dependencies]genpdf = "0.3"


Exemplo: relatório com tabela

use genpdf::{Document, SimplePageSettings};use genpdf::elements::{Paragraph, Table, TableLayout};use genpdf::fonts::FontFamily;

fn main() { let font_family = FontFamily::from_files( "/usr/share/fonts/truetype/dejavu/", "DejaVuSans", None, ).unwrap();

let mut doc = Document::new(font_family); doc.set_title("Relatório de vendas");

let mut table = Table::new(TableLayout::new(vec![2, 3, 3])); 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("1200$"));

doc.push(table); doc.render_to_file("report.pdf").unwrap();}


3. wkhtmltopdf — HTML para PDF via WebKit

Se você prefere criar relatórios em HTML/CSS, use o wrapper sobre o utilitário wkhtmltopdf. Ele converte um template HTML em PDF, suportando estilos, imagens e JavaScript.



Instalação:

[dependencies]wkhtmltopdf = "0.4"


Exemplo: conversão de HTML

use wkhtmltopdf::*;

fn main() { let html = r#" <h1>Relatório do mês</h1> <p>Vendas: <strong>150 000 ₽</strong></p> <table border="1"> <tr><td>Janeiro</td><td>50 000</td></tr> <tr><td>Fevereiro</td><td>100 000</td></tr&g

Recommendations