Generación de informes PDF en Rust: bibliotecas y ejemplos prácticos

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 informes PDF en Rust: descripción general de bibliotecas y ejemplos prácticos



Rust es un lenguaje de programación de sistemas moderno que está ganando popularidad en el desarrollo web, incluso para la creación de aplicaciones de servidor y herramientas de generación de documentos. Si necesita generar informes PDF en Rust, está en el lugar correcto. En este artículo, analizaremos las principales bibliotecas para trabajar con PDF, sus capacidades y proporcionaremos ejemplos de código funcionales.



¿Por qué generar PDF en Rust?

PDF es un formato universal para intercambiar documentos, informes y facturas. Rust ofrece:

  • Alto rendimiento y bajo consumo de memoria.
  • Seguridad en la gestión de memoria sin recolector de basura.
  • Fácil integración con frameworks web (Actix, Rocket, Axum).
  • Multiplataforma (Windows, Linux, macOS).


Principales bibliotecas para PDF en Rust



1. printpdf — trabajo de bajo nivel con PDF

printpdf es la biblioteca más popular para crear documentos PDF "desde cero". Permite dibujar líneas, texto, imágenes y tablas, controlando cada píxel. Es adecuada para informes complejos con maquetación personalizada.



Instalación:

[dependencies]printpdf = "0.7"


Ejemplo: PDF simple con texto

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

fn main() { let (doc, page1, layer1) = PdfDocument::new( "Mi primer informe", 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("¡Hola, mundo!", 24.0, Mm(20.0), Mm(280.0), &font);

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


2. genpdf — generación de informes de alto nivel

genpdf está construido sobre printpdf y proporciona una API conveniente para crear documentos con tablas, encabezados, párrafos y estilos. Es ideal para informes donde la estructura es importante, no el posicionamiento manual.



Instalación:

[dependencies]genpdf = "0.3"


Ejemplo: informe con tabla

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("Informe de ventas");

let mut table = Table::new(TableLayout::new(vec![2, 3, 3])); table.row() .element(Paragraph::new("Producto")) .element(Paragraph::new("Cantidad")) .element(Paragraph::new("Precio"));

table.row() .element(Paragraph::new("Portátil")) .element(Paragraph::new("10")) .element(Paragraph::new("1200$"));

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


3. wkhtmltopdf — HTML a PDF a través de WebKit

Si prefiere maquetar informes en HTML/CSS, use el envoltorio sobre la utilidad wkhtmltopdf. Convierte una plantilla HTML a PDF, admitiendo estilos, imágenes y JavaScript.



Instalación:

[dependencies]wkhtmltopdf = "0.4"


Ejemplo: conversión de HTML

use wkhtmltopdf::*;

fn main() { let html = r#" <h1>Informe del mes</h1> <p>Ventas: <strong>150 000 ₽</strong></p> <table border="1"> <tr><td>Enero</td><td>50 000</td></tr> <tr><td>Febrero</td><td>100 000</td></tr&g

Recommendations