Geração de PDF em Rust: visão geral das bibliotecas e ferramentas para criar documentos PDF

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 ferramentas



A linguagem Rust, conhecida por seu desempenho e segurança, oferece várias bibliotecas poderosas para criar documentos PDF. Ao contrário do Python, onde dominam reportlab e fpdf, o ecossistema Rust fornece soluções leves, mas funcionais. Neste artigo, examinaremos três bibliotecas principais: printpdf, genpdf e pdf-writer, além de abordar abordagens de baixo nível.



1. printpdf — biblioteca básica, mas flexível



printpdf é uma das bibliotecas mais populares para geração de PDF em Rust. Ela fornece acesso de baixo nível à estrutura do PDF, permitindo criar documentos com posicionamento arbitrário de elementos. A biblioteca suporta incorporação de fontes, trabalho com imagens e primitivas gráficas básicas.



Exemplo de uso:



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

fn main() { let (doc, page1, layer1) = PdfDocument::new("Documento PDF", Mm(210.0), Mm(297.0), "Camada 1");

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

// Adiciona texto doc.use_text("Olá, mundo!", 24.0, Mm(20.0), Mm(280.0), &font);

// Desenha uma linha let layer = doc.get_page(page1).get_layer(layer1); layer.set_color(Color::Rgb(Rgb::new(0.0, 0.0, 0.0), None)); layer.add_line(Point::new(Mm(20.0), Mm(270.0)), Point::new(Mm(100.0), Mm(270.0)));

// Salva let file = File::create("example.pdf").unwrap(); doc.save(&mut BufWriter::new(file)).unwrap();}


Vantagens:

  • Controle total sobre a estrutura do PDF
  • Suporte para incorporação de fontes TrueType
  • Trabalho com imagens (PNG, JPEG)
  • Suporte para gráficos SVG (através de printpdf-svg)


Desvantagens:

  • Sem layout automático de texto
  • Necessidade de gerenciar o posicionamento manualmente
  • Falta de suporte para tabelas e layouts de várias páginas


2. genpdf — para documentos simples com layout



genpdf é uma biblioteca de nível mais alto que automatiza o processo de layout. Ela é ideal para criar relatórios, cartas e outros documentos com estrutura simples. A biblioteca suporta quebra de linhas, alinhamento de texto e elementos básicos de design.



Exemplo de criação de um documento simples:



use genpdf::{Document, SimplePageSettings};use genpdf::elements::{Paragraph, Break, Image};use genpdf::fonts::FontFamily;

fn main() -> Result<(), Box> { let font_family = FontFamily::from_files( "fonts/", "LiberationSans", None )?;

let mut doc = Document::new(font_family); doc.set_title("Exemplo de documento");

// Adiciona elementos doc.push(Paragraph::new("Título").bold()); doc.push(Break::new(5.0)); doc.push(Paragraph::new("Texto principal com quebra automática de linhas. " .to_string() + "A biblioteca genpdf calcula as posições automaticamente."));

// Salva doc.render_to_file("output.pdf")?; Ok(())}


Vantagens:

  • Layout automático de texto
  • Suporte para quebras e alinhamento
  • API simples para adicionar elementos
  • Possibilidade de criar documentos de várias páginas


Desvantagens:

  • Suporte limitado a gráficos
  • Sem suporte nativo para tabelas
  • Menos controle sobre o posicionamento


3. pdf-writer — desempenho de baixo nível



pdf-writer é uma biblioteca minimalista para escrita direta de objetos PDF. Ela

Recommendations