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

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



Rust es un lenguaje de programación de sistemas moderno que se utiliza cada vez más para crear aplicaciones de servidor de alto rendimiento, incluida la generación de documentos. En este artículo, revisaremos las principales bibliotecas para crear archivos PDF en Rust, sus capacidades, ejemplos de uso y recomendaciones para elegir.



Bibliotecas principales para trabajar con PDF en Rust



El ecosistema de Rust ofrece varias soluciones maduras para la generación de PDF. Veamos las más populares:



  • printpdf — biblioteca de bajo nivel con soporte para gráficos vectoriales, imágenes y fuentes.
  • genpdf — biblioteca de alto nivel para crear documentos con una API simple.
  • pdf_writer — generador de PDF rápido y seguro con dependencias mínimas.
  • wkhtmltopdf — envoltorio sobre la utilidad wkhtmltopdf para convertir HTML a PDF.


Biblioteca printpdf



printpdf es una de las bibliotecas más populares para generar PDF en Rust. Proporciona control total sobre el contenido del documento: texto, líneas, rectángulos, imágenes y fuentes incrustadas.



Instalación

[dependencies]printpdf = "0.7"


Ejemplo: creación de un PDF simple con texto

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

fn main() { // Creamos un documento en formato A4 let (doc, page1, layer1) = PdfDocument::new( "Documento de ejemplo", Mm(210.0), Mm(297.0), "Layer 1" );

// Obtenemos la fuente actual (incorporada) let font = doc.add_builtin_font(BuiltinFont::Helvetica).unwrap();

// Dibujamos el texto let current_layer = doc.get_page(page1).get_layer(layer1); current_layer.use_text( "¡Hola, mundo PDF desde Rust!", 24.0, Mm(20.0), Mm(270.0), &font );

// Guardamos en un archivo let file = File::create("example.pdf").unwrap(); let writer = BufWriter::new(file); doc.save(&mut std::io::BufWriter::new(writer)).unwrap();}


Biblioteca genpdf



genpdf proporciona una API de más alto nivel, similar a trabajar con procesadores de texto. Soporta párrafos, tablas, encabezados y ajuste automático de línea.



Instalación

[dependencies]genpdf = "0.2"


Ejemplo: creación de un documento con encabezado y tabla

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

fn main() -> Result<(), Box> { // Cargamos la fuente (por ejemplo, DejaVu Sans) let font_family = FontFamily::from_files( "/usr/share/fonts/truetype/dejavu/", "DejaVuSans", None )?;

// Creamos el documento let mut doc = Document::new(font_family, SimplePageSettings::a4());

// Añadimos un encabezado doc.push(Paragraph::new("Informe de ventas").aligned(genpdf::Alignment::Center));

// Creamos una tabla let mut table = Table::new(TableLayout::new(vec![2, 3, 2])); 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("50 000 RUB")); table.row() .element(Paragraph::new("Ratón")) .element(Paragraph::new("50")) .element(Paragraph::new("1 500 RUB"));

doc.push(table);

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


Biblioteca pdf_writer



pdf_writer es una biblioteca minimalista y rápida, orientada al trabajo de bajo nivel con estructuras PDF. Va

Recommendations