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

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): guia completo



A criação de documentos PDF é uma das tarefas comuns no desenvolvimento web, especialmente na construção de sistemas corporativos, aplicações financeiras ou plataformas educacionais. A linguagem Go (Golang) oferece várias bibliotecas poderosas para geração de PDF, que permitem criar desde relatórios de texto simples até documentos complexos de várias páginas com tabelas, gráficos e imagens. Neste artigo, veremos três abordagens populares: gofpdf, maroto e integração com wkhtmltopdf.



1. Biblioteca gofpdf — controle de baixo nível do PDF



gofpdf é uma das bibliotecas mais antigas e flexíveis para geração de PDF em Go. Ela fornece controle total sobre cada elemento da página, mas requer mais código para layouts complexos.



Instalação

go get github.com/jung-kurt/gofpdf


Exemplo: relatório simples com título e tabela

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, "Relatório de Vendas") pdf.Ln(12)

// Cabeçalhos da tabela pdf.SetFont("Arial", "B", 12) headers := []string{"Produto", "Quantidade", "Preço"} for _, h := range headers { pdf.CellFormat(40, 10, h, "1", 0, "C", false, 0, "") } pdf.Ln(-1)

// Dados pdf.SetFont("Arial", "", 12) data := [][]string{{"Notebook", "5", "45000"}, {"Mouse", "12", "1500"}} for _, row := range data { for _, cell := range row { pdf.CellFormat(40, 10, cell, "1", 0, "C", false, 0, "") } pdf.Ln(-1) }

err := pdf.OutputFileAndClose("report.pdf") if err != nil { panic(err) }}


Prós: dependências mínimas, controle total, suporte a Unicode (fontes TrueType).
Contras: falta de componentes prontos (tabelas, gráficos), necessidade de calcular posições manualmente.



2. Biblioteca maroto — geração de alto nível com grade



maroto é construída sobre gofpdf e oferece uma abordagem baseada em componentes com grade, simplificando a criação de layouts complexos. Ideal para relatórios padrão: faturas, notas fiscais, listas de preços.



Instalação

go get github.com/johnfercher/maroto/v2


Exemplo: relatório com logotipo e tabela

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.NewMaroto(maroto.WithMaxGridSize(12)) m.RegisterHeader(func() { m.Row(20, func() { m.Col(3, func() { m.FileImage("logo.png", props.Rect{ Percent: 80, Center: true, }) }) m.Col(9, func() { m.Text("TecnoService Ltda.", props.Text{ Style: props.Bold, Size: 16, }) }) }) })

m.Row(10, func() { m.Col(12, func() { m.Table([]string{"Nome", "Qtd", "Valor"}, [][]string{ {"Monitor 24\\"", "2", "40000"}, {"Teclado", "5", "7500"}, }, props.Table{ Content: props.TableContent{ GridSizes: []uint{6, 3, 3}, }, }) }) })

document, _ := m.Generate() _ = document.Save("invoice.pdf")}


Prós: desenvolvimento rápido, alinhamento automático, suporte integrado para tabelas, QR codes e códigos de barras.
Contras: mais

Recommendations