Generación de PDF en Rust: revisión de bibliotecas y herramientas para crear documentos PDF

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Generación de PDF en Rust: revisión de bibliotecas y herramientas



El lenguaje Rust, conocido por su rendimiento y seguridad, ofrece varias bibliotecas potentes para crear documentos PDF. A diferencia de Python, donde dominan reportlab y fpdf, el ecosistema de Rust proporciona soluciones ligeras pero funcionales. En este artículo, analizaremos tres bibliotecas clave: printpdf, genpdf y pdf-writer, y también abordaremos enfoques de bajo nivel.



1. printpdf — una biblioteca básica pero flexible



printpdf es una de las bibliotecas más populares para generar PDF en Rust. Proporciona acceso de bajo nivel a la estructura del PDF, permitiendo crear documentos con posicionamiento arbitrario de elementos. La biblioteca admite la incrustación de fuentes, el trabajo con imágenes y primitivas gráficas básicas.



Ejemplo 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), "Capa 1");

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

// Agregamos texto doc.use_text("¡Hola, mundo!", 24.0, Mm(20.0), Mm(280.0), &font);

// Dibujamos una línea 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)));

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


Ventajas:

  • Control total sobre la estructura del PDF
  • Soporte para incrustación de fuentes TrueType
  • Trabajo con imágenes (PNG, JPEG)
  • Soporte para gráficos SVG (a través de printpdf-svg)


Desventajas:

  • Sin maquetación automática de texto
  • Necesidad de gestionar el posicionamiento manualmente
  • Falta de soporte para tablas y diseños de varias páginas


2. genpdf — para documentos simples con maquetación



genpdf es una biblioteca de más alto nivel que automatiza el proceso de maquetación. Es ideal para crear informes, cartas y otros documentos con estructura simple. La biblioteca admite saltos de línea, alineación de texto y elementos básicos de diseño.



Ejemplo de creación de un documento simple:



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("Ejemplo de documento");

// Agregamos elementos doc.push(Paragraph::new("Título").bold()); doc.push(Break::new(5.0)); doc.push(Paragraph::new("Texto principal con salto de línea automático. " .to_string() + "La biblioteca genpdf calcula las posiciones por sí misma."));

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


Ventajas:

  • Maquetación automática de texto
  • Soporte para saltos de línea y alineación
  • API simple para agregar elementos
  • Posibilidad de crear documentos de varias páginas


Desventajas:

  • Soporte limitado para gráficos
  • Sin soporte integrado para tablas
  • Menos control sobre el posicionamiento


3. pdf-writer — rendimiento de bajo nivel



pdf-writer es una biblioteca minimalista para la escritura directa de objetos PDF. P

Recommendations