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 También en la biblioteca
Generador de códigos QR en Rust: creación e integración en aplicaciones web
Symfony/Validator PHP: guía completa con ejemplos prácticos
gRPC para C++: bibliotecas, configuración y ejemplos de código
Cliente Redis para C# (.NET): StackExchange.Redis — conexión y ejemplos
CoreBluetooth Swift: guía completa con ejemplos prácticos