Generación de PDF en Go (Golang): bibliotecas y ejemplos

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 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 {

Recommendations