Generación de informes PDF en Go (Golang): revisión de bibliotecas y ejemplos prácticos
Go (Golang) es un lenguaje compilado moderno, ideal para crear aplicaciones de servidor de alta carga, microservicios y utilidades de línea de comandos. Una de las tareas comunes en el desarrollo web es la generación de informes en formato PDF: facturas, albaranes, paneles analíticos o certificados. En este artículo, revisaremos tres bibliotecas populares para trabajar con PDF en Go, sus capacidades y proporcionaremos ejemplos de código funcionales.
¿Por qué Go para la generación de PDF?
Go ofrece varias ventajas: alto rendimiento, facilidad de implementación (un solo binario), soporte integrado para concurrencia y una biblioteca estándar rica. Para la generación de PDF no es necesario instalar entornos de ejecución voluminosos (como Java o .NET), lo que hace que las soluciones en Go sean compactas y rápidas. Sin embargo, a diferencia de Python, donde existen bibliotecas potentes como ReportLab, el ecosistema de Go para PDF es más diverso, y la elección de la herramienta depende de la complejidad del informe.
1. gofpdf — generación básica de PDF
gofpdf es un puerto de la conocida biblioteca PHP FPDF. Permite crear documentos PDF «desde cero»: añadir texto, imágenes, líneas, tablas y fuentes. La biblioteca no admite plantillas HTML, por lo que todo el marcado se define mediante programación.
Instalación:
go get github.com/jung-kurt/gofpdfEjemplo: creación de una factura simple
package main
import ( "github.com/jung-kurt/gofpdf")
func main() { pdf := gofpdf.New("P", "mm", "A4", "") pdf.AddPage() pdf.SetFont("Arial", "B", 16) pdf.Cell(40, 10, "Factura Nº123") pdf.Ln(12) pdf.SetFont("Arial", "", 12) pdf.Cell(40, 10, "Fecha: 2024-01-15") pdf.Ln(10) pdf.Cell(40, 10, "Producto: Portátil") pdf.Ln(10) pdf.Cell(40, 10, "Importe: 50 000 RUB") err := pdf.OutputFileAndClose("invoice.pdf") if err != nil { panic(err) }}Ventajas: ligero, control total sobre el posicionamiento, soporte Unicode mediante fuentes TTF.
Desventajas: falta de soporte HTML integrado, complejidad al crear diseños complejos.
2. maroto — creación simplificada de informes
Maroto está construido sobre gofpdf, pero proporciona una API de alto nivel para crear informes. Se trabaja con conceptos como «cuadrícula», «filas», «columnas», «tablas». Esto recuerda al trabajo con frameworks CSS.
Instalación:
go get github.com/johnfercher/maroto/v2Ejemplo: tabla con datos
package main
import ( "github.com/johnfercher/maroto/v2/pkg/core" "github.com/johnfercher/maroto/v2/pkg/props" "github.com/johnfercher/maroto/v2")
func main() { m := maroto.NewMaroto(maroto.WithPageSize("A4")) m.RegisterHeader(func() { m.Row(20, func() { m.Col(12, func() { m.Text("Informe de ventas", props.Text{Bold: true, Size: 16}) }) }) })
headers := []string{"Producto", "Cantidad", "Precio"} contents := [][]string{ {"Portátil", "2", "100000"}, {"Ratón", "5", "2500"}, }
m.Table(headers, contents, props.Table{}) document, _ := m.Generate() _ = document.Save("report.pdf")}Ventajas: estilo declarativo, alineación automática, soporte integrado para tablas y gráficos.
Desventajas: menos flexibilidad para diseños no estándar en comparación con gofpdf.
3. wkhtmltopdf — HTML a PDF
Si necesita convertir una plantilla HTML a PDF (por ejemplo, con estilos CSS), utilice wkhtmltopdf — un envoltorio sobre la utilidad wkhtmltopdf (WebKit). No es una biblioteca pura de Go, pero permite aprovechar toda la potencia de HTML/CSS para el diseño de informes.
También en la biblioteca
Cliente Redis para Node.js: ioredis — una potente herramienta para trabajar con Redis
clinic.js — Monitoreo de aplicaciones TypeScript
Frameworks CLI para PHP: creación de aplicaciones de consola con Symfony Console y Laravel Zero