Generación de informes PDF en Go: revisión de bibliotecas y ejemplos de código

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 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/gofpdf


Ejemplo: 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/v2


Ejemplo: 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.

Recommendations