Generación de PDF en Go (Golang): revisión de bibliotecas y herramientas
La creación de documentos PDF es una de las tareas comunes en el desarrollo web. En el ecosistema de Go (Golang) existen varias bibliotecas maduras que permiten generar PDF tanto para informes simples como para documentos complejos de varias páginas con tablas, gráficos y fuentes. En este artículo, revisaremos las principales herramientas, sus capacidades y proporcionaremos ejemplos prácticos de código.
¿Por qué Go para la generación de PDF?
Go es un lenguaje compilado con excelente rendimiento y un modelo de concurrencia simple. Para tareas de generación de PDF, esto significa:
- Procesamiento rápido de grandes volúmenes de datos
- Integración sencilla con servidores web (net/http)
- Posibilidad de paralelizar la generación de múltiples documentos
- Sin dependencias externas (el binario incluye todo lo necesario)
Bibliotecas principales para trabajar con PDF en Go
1. gofpdf — biblioteca simple y popular
gofpdf es un puerto de la conocida biblioteca PHP FPDF a Go. Proporciona una API simple para crear PDF con elementos básicos: texto, líneas, rectángulos, imágenes y tablas. La biblioteca no requiere dependencias externas y admite Unicode mediante la incrustación de fuentes.
Ejemplo de creación de un PDF simple con gofpdf:
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.OutputFileAndClose("hello.pdf")}Capacidades principales de gofpdf:
- Soporte para UTF-8 (requiere incrustación de fuentes TrueType)
- Saltos de página automáticos
- Gráficos vectoriales (líneas, curvas, rellenos)
- Incrustación de imágenes (JPEG, PNG, GIF)
- Tablas con datos dinámicos
2. UniPDF — potente biblioteca comercial
UniPDF (anteriormente FoxyUtils) es una solución profesional para trabajar con PDF en Go. La biblioteca tiene código abierto, pero para uso comercial se requiere una licencia. UniPDF admite no solo la creación, sino también la edición, conversión y extracción de datos de PDF.
Ejemplo de creación de PDF con UniPDF:
package main
import ( "os" "github.com/unidoc/unipdf/v3/creator")
func main() { c := creator.New() c.NewPage() // Agregar texto text := c.NewStyledParagraph() text.Append("Ejemplo de documento UniPDF") text.SetFontSize(18) c.Draw(text) // Guardar c.WriteToFile("unipdf_example.pdf")}Capacidades únicas de UniPDF:
- Análisis completo y edición de PDF existentes
- Soporte para formularios, anotaciones y marcadores
- Conversión de HTML a PDF
- Trabajo con firmas digitales
- Extracción de texto e imágenes
3. Maroto — generador de PDF basado en componentes visuales
Maroto está construido sobre gofpdf y ofrece un enfoque de nivel superior utilizando el concepto de "cuadrícula" (grid). Esto es útil para crear informes, facturas y otros documentos estructurados.
Ejemplo con Maroto:
package main
import ( "fmt" "github.com/johnfercher/maroto/v2/pkg/consts/align" "github.com/johnfercher/maroto/v2/pkg/consts/fontstyle" "github.com/johnfercher/maroto/v2/pkg/core" "github.com/johnfercher/maroto/v2/pkg/props" "github.com/johnfercher/maroto/v2")
func main() { m := maroto.New() m.Row(20, func() { m.Col(12, func() { m.Text("Factura Nº123", props.Text{ Style: fontstyle.Bold, Align: align.Center, }) }) }) document, err := m.Generate() if err != nil { También en la biblioteca
Colas de tareas en Swift: GCD, OperationQueue y Combine para iOS/macOS
Trabajo con Markdown en C++: bibliotecas, analizadores y herramientas
Generación Swagger/OpenAPI para Java: bibliotecas y herramientas
gRPC para C# (.NET): bibliotecas, configuración y ejemplos de código
EventKit Swift: guía completa con ejemplos prácticos