Geração de relatórios PDF em Go (Golang): bibliotecas e exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Geração de relatórios PDF em Go (Golang): visão geral das bibliotecas e exemplos de código



Go (Golang) é uma linguagem compilada moderna, cada vez mais escolhida para criar aplicações servidoras de alta carga e microsserviços. Uma das tarefas típicas nesses sistemas é a geração de relatórios PDF (faturas, atas, dashboards estatísticos). Neste artigo, veremos três bibliotecas populares para gerar PDF em Go, seus pontos fortes e exemplos de código prontos.



1. gofpdf — clássico para criar PDF do zero



A biblioteca gofpdf (atualmente desenvolvida como jung-kurt/gofpdf ou fork go-pdf/fpdf) é uma adaptação da conhecida biblioteca PHP FPDF. Ela permite criar documentos PDF sem dependências externas, usando apenas os recursos padrão do Go.



Instalação

go get github.com/jung-kurt/gofpdf


Exemplo: fatura simples

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, "Fatura nº123 de 01/01/2025", "0", 1, "C", false, 0, "") pdf.SetFont("Arial", "", 12) pdf.Ln(10) pdf.CellFormat(190, 10, "Produto: Notebook", "1", 1, "L", false, 0, "") pdf.CellFormat(190, 10, "Preço: 120 000 руб.", "1", 1, "L", false, 0, "") pdf.CellFormat(190, 10, "Total: 120 000 руб.", "1", 1, "L", false, 0, "") err := pdf.OutputFileAndClose("invoice.pdf") if err != nil { panic(err) }}


Vantagens: dependências mínimas, controle total sobre cada elemento, suporte a Unicode (via AddUTF8Font).
Desvantagens: API de baixo nível — para relatórios complexos, será necessário codificar muito manualmente.



2. maroto — geração de alto nível com tabelas e estilos



Maroto é construída sobre o gofpdf, mas oferece uma API mais conveniente: tabelas, grids, alinhamento automático e suporte embutido a fontes. Ideal para relatórios típicos: faturas, listas, tabelas de preços.



Instalação

go get github.com/johnfercher/maroto/v2


Exemplo: tabela com dados

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) // Cabeçalho m.Row(10, func() { m.Col(12, func() { m.Text("Relatório de vendas", props.Text{ Style: props.Bold, Size: 16, Align: props.Center, }) }) }) // Tabela header := []string{"Produto", "Qtd", "Preço"} 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")}


Vantagens: desenvolvimento rápido, estilos embutidos, quebra de página automática.
Desvantagens: menos flexibilidade para layouts não padronizados.



3. wkhtmltopdf — conversão de HTML para PDF via wrapper Go



Se você já possui templates HTML (por exemplo, em Bootstrap), a maneira mais fácil é usar o wkhtmltopdf. Não é uma biblioteca Go, mas um utilitário de linha de comando, porém existe um wrapper Go chamado go-wkhtmltopdf. Ele recebe uma string HTML e retorna um PDF.



Instalação

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

Recommendations