Generación de PDF en Go (Golang): Revisión completa de herramientas y bibliotecas
Las aplicaciones web modernas y los microservicios a menudo requieren la generación de documentos PDF: informes, facturas, albaranes, certificados o simplemente exportación de datos. El lenguaje Go 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 en pythonlib.ru.
¿Por qué usar Go para la generación de PDF?
Go (Golang) es un lenguaje compilado, estáticamente tipado, conocido por su rendimiento y simplicidad. Al generar PDF, esto ofrece las siguientes ventajas:
- Alta velocidad — los archivos binarios de Go funcionan rápidamente y utilizan la memoria de manera eficiente.
- Facilidad de implementación — un solo archivo ejecutable sin dependencias externas (excepto en casos con wkhtmltopdf).
- Soporte integrado de concurrencia — puede procesar múltiples solicitudes de generación de PDF simultáneamente.
- Multiplataforma — compile una vez y ejecute en Linux, Windows, macOS.
Bibliotecas principales para trabajar con PDF en Go
Consideremos tres enfoques populares: una implementación pura en Go (gofpdf), una biblioteca comercial profesional (uniPDF) y la conversión de HTML a PDF (wkhtmltopdf).
1. gofpdf — biblioteca simple y ligera
gofpdf (ahora github.com/jung-kurt/gofpdf) es una de las primeras y más comunes bibliotecas para crear PDF en Go puro. No requiere dependencias externas y permite dibujar mediante programación texto, líneas, imágenes y tablas.
Ejemplo de 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!") // Añadir imagen (logotipo) pdf.ImageOptions("logo.png", 10, 20, 50, 0, false, gofpdf.ImageOptions{ImageType: "PNG", ReadDpi: true}, 0, "") // Guardar en archivo err := pdf.OutputFileAndClose("output.pdf") if err != nil { panic(err) }}Ventajas:
- Completamente en Go — sin programas externos.
- Ligero y fácil de instalar.
- Soporte Unicode (incluyendo cirílico) mediante fuentes integradas.
Desventajas:
- Soporte limitado para diseños complejos (por ejemplo, no hay soluciones listas para tablas complejas).
- Posicionamiento manual de elementos — adecuado para documentos simples.
2. UniPDF — solución profesional para tareas complejas
UniPDF (de github.com/unidoc/unipdf/v3) es una potente biblioteca comercial que proporciona un control casi total sobre PDF. Admite creación, edición, conversión y extracción de datos de PDF. Para proyectos educativos y sin fines de lucro, existe una versión gratuita con limitaciones.
Ejemplo de creación de un informe con tabla:
package main
import ( "github.com/unidoc/unipdf/v3/common/license" "github.com/unidoc/unipdf/v3/creator")
func main() { // Especifique la licencia (gratuita para pruebas) license.SetMeteredKey("su_clave") c := creator.New() c.NewPage() // Título chapter := c.NewChapter("Informe mensual") chapter.Add(c.NewParagraph("Datos de ventas")) // Tabla table := c.NewTable(3) table.SetColumnWidths(100, 100, 100) headers := []string{"Producto", "Cantidad", "Total"} for _, h := range headers { cell := table.NewCell() cell.SetBackgroundColor(creator.Col También en la biblioteca
Envío de SMS en Java: Resumen y ejemplos de uso de bibliotecas API (Twilio, Nexmo)
Planificador de tareas Kotlin: kotlinx.coroutines y bibliotecas para tareas en segundo plano
Cliente Elasticsearch para C++: elasticlient y guía completa
Envío de correo electrónico en C++: libcurl y clientes SMTP