Generación de PDF en Go: revisión de bibliotecas y ejemplos de código

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 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/gofpdf


Ejemplo: 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/v2


Ejemplo: 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/v3


Pr

Recommendations