Generación de PDF en Go (Golang): Revisión completa de bibliotecas y herramientas
La creación de documentos PDF es una de las tareas frecuentes en el desarrollo web, la automatización de informes y la creación de flujos de documentos electrónicos. El lenguaje Go (Golang) ofrece varias soluciones maduras para esta tarea. En este artículo, analizaremos en detalle las principales bibliotecas, sus capacidades, ejemplos de uso y le ayudaremos a elegir la herramienta adecuada para su proyecto.
¿Por qué Go para la generación de PDF?
Go combina el alto rendimiento de un lenguaje compilado con la simplicidad del desarrollo. Gracias al soporte incorporado de concurrencia (gorutinas) y la gestión eficiente de la memoria, la generación de PDF incluso con grandes volúmenes de datos se realiza rápidamente. Además, la tipificación estática y la rica biblioteca estándar hacen que el código sea confiable y predecible.
Bibliotecas principales para la generación de PDF en Go
1. gofpdf — biblioteca simple y ligera
gofpdf es un puerto de la conocida biblioteca PHP FPDF. Proporciona una API básica para crear PDF desde cero: agregar páginas, fuentes, imágenes, tablas y primitivas gráficas simples.
Instalación:
go get github.com/jung-kurt/gofpdfEjemplo: creación de un PDF simple con texto e imagen
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, "¡Hola, mundo PDF!") pdf.ImageOptions("logo.png", 10, 20, 30, 0, false, gofpdf.ImageOptions{ImageType: "PNG"}, 0, "") err := pdf.OutputFileAndClose("output.pdf") if err != nil { panic(err) }}Ventajas: API minimalista, tamaño pequeño, no requiere dependencias externas, soporte Unicode (UTF-8).
Desventajas: soporte limitado para diseños complejos, no tiene renderizado HTML incorporado.
2. maroto — biblioteca de alto nivel para informes
Maroto está construida sobre gofpdf y agrega el concepto de "cuadrícula" (grid) para crear diseños complejos: tablas, columnas, leyendas y logotipos. Ideal para facturas, albaranes e informes.
Instalación:
go get github.com/johnfercher/maroto/v2Ejemplo: creación de una factura con tabla
package main
import ( "github.com/johnfercher/maroto/v2" "github.com/johnfercher/maroto/v2/pkg/components/col" "github.com/johnfercher/maroto/v2/pkg/components/row" "github.com/johnfercher/maroto/v2/pkg/components/text" "github.com/johnfercher/maroto/v2/pkg/core")
func main() { m := maroto.New() m.AddRow(20, text.NewCol(12, "Factura Nº123")) m.AddRow(10, text.NewCol(12, "Fecha: 2024-01-15")) // Tabla headers := []string{"Producto", "Cant.", "Precio", "Total"} rows := [][]string{ {"Portátil", "2", "50000", "100000"}, {"Ratón", "5", "1500", "7500"}, } m.AddRow(10, col.New(12).Add(text.New("Tabla de productos"))) // Para la tabla use el componente table // m.AddTable(headers, rows) doc, _ := m.Build() doc.Save("invoice.pdf")}Ventajas: estilo declarativo, componentes listos (tablas, códigos QR, gráficos), alineación automática.
Desventajas: más dependencias que gofpdf, cierta reducción del rendimiento en diseños complejos.
3. unipdf — biblioteca comercial con capacidades avanzadas
UniPDF (de la empresa UniDoc) es una solución profesional para trabajar con PDF: creación, edición, extracción de datos, firma, cifrado. Soporta conversión HTML a PDF (a través de WebKit).
Instalación:
go get github.com/unidoc/unipdf/v3Pr
También en la biblioteca
Criptografía en TypeScript: cifrado y hashes en la práctica
Guía completa de Caffeine para Java: ejemplos y uso
Procesamiento de JSON en TypeScript: tipado, validación y análisis
Trabajo con S3 y almacenamiento en la nube en Swift (iOS/macOS): AWSS3 y Amplify
gRPC C++: Guía completa con ejemplos prácticos