Geração de PDF em Go (Golang): Visão geral completa de ferramentas e bibliotecas
Aplicações web modernas e microsserviços frequentemente exigem a geração de documentos PDF: relatórios, faturas, notas fiscais, certificados ou simplesmente exportação de dados. A linguagem Go oferece várias soluções maduras para essa tarefa. Neste artigo, vamos analisar detalhadamente as principais bibliotecas, seus recursos, exemplos de uso e ajudar você a escolher a ferramenta adequada para o seu projeto no pythonlib.ru.
Por que usar Go para gerar PDF?
Go (Golang) é uma linguagem compilada, estaticamente tipada, conhecida por seu desempenho e simplicidade. Ao gerar PDF, isso oferece as seguintes vantagens:
- Alta velocidade — os binários Go funcionam rapidamente e usam memória de forma eficiente.
- Facilidade de implantação — um único arquivo executável sem dependências externas (exceto nos casos com wkhtmltopdf).
- Suporte nativo a concorrência — é possível processar várias solicitações de geração de PDF simultaneamente.
- Multiplataforma — compile uma vez e execute em Linux, Windows, macOS.
Principais bibliotecas para trabalhar com PDF em Go
Vamos considerar três abordagens populares: implementação pura em Go (gofpdf), biblioteca comercial profissional (uniPDF) e conversão de HTML para PDF (wkhtmltopdf).
1. gofpdf — biblioteca simples e leve
gofpdf (agora github.com/jung-kurt/gofpdf) é uma das primeiras e mais difundidas bibliotecas para criar PDF em Go puro. Ela não requer dependências externas e permite desenhar programaticamente texto, linhas, imagens e tabelas.
Exemplo de criação de um PDF simples com texto e imagem:
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!") // Adiciona uma imagem (logotipo) pdf.ImageOptions("logo.png", 10, 20, 50, 0, false, gofpdf.ImageOptions{ImageType: "PNG", ReadDpi: true}, 0, "") // Salva no arquivo err := pdf.OutputFileAndClose("output.pdf") if err != nil { panic(err) }}Pontos positivos:
- Totalmente em Go — sem programas externos.
- Leve e fácil de instalar.
- Suporte a Unicode (incluindo cirílico) através de fontes incorporadas.
Pontos negativos:
- Suporte limitado para layouts complexos (por exemplo, não há soluções prontas para tabelas complexas).
- Posicionamento manual de elementos — adequado para documentos simples.
2. UniPDF — solução profissional para tarefas complexas
UniPDF (de github.com/unidoc/unipdf/v3) é uma poderosa biblioteca comercial que oferece controle quase total sobre PDF. Ela suporta criação, edição, conversão e extração de dados de PDF. Para projetos educacionais e sem fins lucrativos, existe uma versão gratuita com limitações.
Exemplo de criação de relatório com tabela:
package main
import ( "github.com/unidoc/unipdf/v3/common/license" "github.com/unidoc/unipdf/v3/creator")
func main() { // Informe a licença (gratuita para testes) license.SetMeteredKey("sua_chave") c := creator.New() c.NewPage() // Título chapter := c.NewChapter("Relatório do mês") chapter.Add(c.NewParagraph("Dados de vendas")) // Tabela table := c.NewTable(3) table.SetColumnWidths(100, 100, 100) headers := []string{"Produto", "Quantidade", "Valor"} for _, h := range headers { cell := table.NewCell() cell.SetBackgroundColor(creator.Col Também na biblioteca
Biblioteca WebSocket Ratchet para PHP: criando tempo real no site
Envio de email em Rust: bibliotecas lettre e async-smtp para mailings
Aprendizado de Máquina em JavaScript: bibliotecas para Node.js — visão geral e exemplos