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): visão geral das bibliotecas e exemplos práticos



Go (Golang) é uma linguagem compilada moderna, ideal para criar aplicações servidoras de alta carga, microsserviços e utilitários de linha de comando. Uma das tarefas comuns no desenvolvimento web é a geração de relatórios em formato PDF: faturas, notas fiscais, dashboards analíticos ou certificados. Neste artigo, veremos três bibliotecas populares para trabalhar com PDF em Go, suas funcionalidades e exemplos de código funcionais.



Por que Go para geração de PDF?

Go oferece várias vantagens: alta performance, simplicidade de implantação (um único binário), suporte nativo a concorrência e uma biblioteca padrão rica. Para gerar PDF, não é necessário instalar runtimes pesados (como Java ou .NET), tornando as soluções em Go compactas e rápidas. No entanto, ao contrário do Python, que possui bibliotecas poderosas como ReportLab, o ecossistema Go para PDF é mais diversificado, e a escolha da ferramenta depende da complexidade do relatório.



1. gofpdf — geração básica de PDF

gofpdf é um port da conhecida biblioteca PHP FPDF. Ela permite criar documentos PDF "do zero": adicionar texto, imagens, linhas, tabelas e fontes. A biblioteca não suporta templates HTML, portanto toda a marcação é feita programaticamente.



Instalação:

go get github.com/jung-kurt/gofpdf


Exemplo: criação de uma fatura simples

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, "Fatura nº 123") pdf.Ln(12) pdf.SetFont("Arial", "", 12) pdf.Cell(40, 10, "Data: 2024-01-15") pdf.Ln(10) pdf.Cell(40, 10, "Produto: Notebook") pdf.Ln(10) pdf.Cell(40, 10, "Valor: R$ 50.000,00") err := pdf.OutputFileAndClose("invoice.pdf") if err != nil { panic(err) }}


Prós: leve, controle total sobre o posicionamento, suporte a Unicode via fontes TTF.
Contras: falta de suporte nativo a HTML, complexidade na criação de layouts elaborados.



2. maroto — criação simplificada de relatórios

Maroto é construído sobre o gofpdf, mas fornece uma API de alto nível para criar relatórios. Você trabalha com conceitos como "grade", "linhas", "colunas", "tabelas". Isso lembra o trabalho com frameworks CSS.



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.NewMaroto(maroto.WithPageSize("A4")) m.RegisterHeader(func() { m.Row(20, func() { m.Col(12, func() { m.Text("Relatório de Vendas", props.Text{Bold: true, Size: 16}) }) }) })

headers := []string{"Produto", "Qtd", "Preço"} contents := [][]string{ {"Notebook", "2", "100000"}, {"Mouse", "5", "2500"}, }

m.Table(headers, contents, props.Table{}) document, _ := m.Generate() _ = document.Save("report.pdf")}


Prós: estilo declarativo, alinhamento automático, suporte nativo a tabelas e gráficos.
Contras: menos flexibilidade para layouts não padronizados em comparação com gofpdf.



3. wkhtmltopdf — HTML para PDF

Se você precisa transformar um template HTML em PDF (por exemplo, com estilos CSS), use wkhtmltopdf — um wrapper para o utilitário wkhtmltopdf (WebKit). Não é uma biblioteca Go pura, mas permite usar todo o poder do HTML/CSS para o design dos relatórios.



Recommendations