Geração de PDF em Go (Golang): revisão de bibliotecas e ferramentas
Criar documentos PDF é uma das tarefas comuns no desenvolvimento web. No ecossistema Go (Golang), existem várias bibliotecas maduras que permitem gerar PDF tanto para relatórios simples quanto para documentos complexos de várias páginas com tabelas, gráficos e fontes. Neste artigo, vamos analisar as principais ferramentas, suas funcionalidades e fornecer exemplos práticos de código.
Por que Go para geração de PDF?
Go é uma linguagem compilada com excelente desempenho e um modelo de concorrência simples. Para tarefas de geração de PDF, isso significa:
- Processamento rápido de grandes volumes de dados
- Integração fácil com servidores web (net/http)
- Possibilidade de paralelizar a geração de vários documentos
- Ausência de dependências externas (o binário inclui tudo o que é necessário)
Principais bibliotecas para trabalhar com PDF em Go
1. gofpdf — biblioteca simples e popular
gofpdf é uma adaptação da conhecida biblioteca PHP FPDF para Go. Ela oferece uma API simples para criar PDF com elementos básicos: texto, linhas, retângulos, imagens e tabelas. A biblioteca não requer dependências externas e suporta Unicode através da incorporação de fontes.
Exemplo de criação de um PDF simples com gofpdf:
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, "Olá, mundo!") pdf.OutputFileAndClose("hello.pdf")}Principais funcionalidades do gofpdf:
- Suporte a UTF-8 (requer incorporação de fontes TrueType)
- Quebras de página automáticas
- Gráficos vetoriais (linhas, curvas, preenchimentos)
- Incorporação de imagens (JPEG, PNG, GIF)
- Tabelas com dados dinâmicos
2. UniPDF — biblioteca comercial poderosa
UniPDF (anteriormente FoxyUtils) é uma solução profissional para trabalhar com PDF em Go. A biblioteca tem código aberto, mas para uso comercial é necessária uma licença. O UniPDF suporta não apenas a criação, mas também a edição, conversão e extração de dados de PDF.
Exemplo de criação de PDF com UniPDF:
package main
import ( "os" "github.com/unidoc/unipdf/v3/creator")
func main() { c := creator.New() c.NewPage() // Adicionando texto text := c.NewStyledParagraph() text.Append("Exemplo de documento UniPDF") text.SetFontSize(18) c.Draw(text) // Salvando c.WriteToFile("unipdf_example.pdf")}Funcionalidades exclusivas do UniPDF:
- Análise completa e edição de PDFs existentes
- Suporte a formulários, anotações e marcadores
- Conversão de HTML para PDF
- Trabalho com assinaturas digitais
- Extração de texto e imagens
3. Maroto — gerador de PDF baseado em componentes visuais
Maroto é construído sobre o gofpdf e oferece uma abordagem de nível mais alto usando o conceito de "grade" (grid). Isso é conveniente para criar relatórios, faturas e outros documentos estruturados.
Exemplo com Maroto:
package main
import ( "fmt" "github.com/johnfercher/maroto/v2/pkg/consts/align" "github.com/johnfercher/maroto/v2/pkg/consts/fontstyle" "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.Row(20, func() { m.Col(12, func() { m.Text("Fatura nº123", props.Text{ Style: fontstyle.Bold, Align: align.Center, }) }) }) document, err := m.Generate() if err != nil { Também na biblioteca
Autorização e Autenticação em Rust: Bibliotecas e Ferramentas
Cron para Go: guia completo com exemplos práticos
Mockery para PHP: guia completo com exemplos práticos
Cliente Redis para Java: Jedis, Lettuce e Redisson — visão geral e exemplos