Generación de informes 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 informes PDF en Go (Golang): descripción general de bibliotecas y ejemplos de código



Go (Golang) es un lenguaje compilado moderno que se elige cada vez más para crear aplicaciones de servidor de alta carga y microservicios. Una de las tareas típicas en dichos sistemas es la generación de informes PDF (facturas, actas, paneles estadísticos). En este artículo, revisaremos tres bibliotecas populares para generar PDF en Go, sus puntos fuertes y proporcionaremos ejemplos de código listos para usar.



1. gofpdf — el clásico para crear PDF desde cero



La biblioteca gofpdf (actualmente desarrollada como jung-kurt/gofpdf o el fork go-pdf/fpdf) es un puerto de la conocida biblioteca PHP FPDF. Permite crear documentos PDF sin dependencias externas, utilizando solo las capacidades estándar de Go.



Instalación

go get github.com/jung-kurt/gofpdf


Ejemplo: factura simple

package main

import ( "github.com/jung-kurt/gofpdf")

func main() { pdf := gofpdf.New("P", "mm", "A4", "") pdf.SetFont("Arial", "B", 16) pdf.AddPage() pdf.CellFormat(190, 10, "Factura Nº123 del 01/01/2025", "0", 1, "C", false, 0, "") pdf.SetFont("Arial", "", 12) pdf.Ln(10) pdf.CellFormat(190, 10, "Producto: Portátil", "1", 1, "L", false, 0, "") pdf.CellFormat(190, 10, "Precio: 120 000 RUB", "1", 1, "L", false, 0, "") pdf.CellFormat(190, 10, "Total: 120 000 RUB", "1", 1, "L", false, 0, "") err := pdf.OutputFileAndClose("invoice.pdf") if err != nil { panic(err) }}


Ventajas: dependencias mínimas, control total sobre cada elemento, soporte Unicode (a través de AddUTF8Font).
Desventajas: API de bajo nivel — para informes complejos, se necesita mucho código manual.



2. maroto — generación de alto nivel con tablas y estilos



Maroto está construida sobre gofpdf, pero ofrece una API más conveniente: tablas, cuadrículas, alineación automática y soporte de fuentes integrado. Ideal para informes típicos: facturas, listas, listas de precios.



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.New() m.SetPageMargins(10, 10, 10) // Título m.Row(10, func() { m.Col(12, func() { m.Text("Informe de ventas", props.Text{ Style: props.Bold, Size: 16, Align: props.Center, }) }) }) // Tabla header := []string{"Producto", "Cantidad", "Precio"} data := [][]string{ {"Monitor", "2", "30 000"}, {"Teclado", "5", "7 500"}, } m.TableList(header, data, props.TableList{ HeaderProp: props.TableListContent{ Style: props.Bold, Size: 10, }, ContentProp: props.TableListContent{ Size: 9, }, }) document, _ := m.Generate() document.Save("report.pdf")}


Ventajas: desarrollo rápido, estilos integrados, división automática de páginas.
Desventajas: menos flexibilidad para diseños no estándar.



3. wkhtmltopdf — conversión de HTML a PDF mediante un wrapper de Go



Si ya tiene plantillas HTML (por ejemplo, con Bootstrap), la forma más sencilla es usar wkhtmltopdf. No es una biblioteca de Go, sino una utilidad de línea de comandos, pero para Go existe el wrapper go-wkhtmltopdf. Toma una cadena HTML y devuelve un PDF.



Instalación

# Primero instale wkhtmltopdf: https://wkhtmltopdf.org/downloads.htmlgo get github.com/SebastiaanKlippert/go-wkhtmltopdf

Recommendations