Geração de 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 PDF em Go (Golang): Visão geral completa de bibliotecas e ferramentas



Criar documentos PDF é uma das tarefas comuns no desenvolvimento web, automação de relatórios e criação de fluxo de documentos eletrônicos. A linguagem Go (Golang) oferece várias soluções maduras para esta tarefa. Neste artigo, analisaremos detalhadamente as principais bibliotecas, seus recursos, exemplos de uso e ajudaremos você a escolher a ferramenta adequada para o seu projeto.



Por que Go para geração de PDF?

Go combina o alto desempenho de uma linguagem compilada com a simplicidade de desenvolvimento. Graças ao suporte embutido para concorrência (goroutines) e gerenciamento eficiente de memória, a geração de PDF mesmo em grandes volumes de dados é rápida. Além disso, a tipagem estática e a rica biblioteca padrão tornam o código confiável e previsível.



Principais bibliotecas para geração de PDF em Go



1. gofpdf — biblioteca simples e leve

gofpdf é um port da conhecida biblioteca PHP FPDF. Ela fornece uma API básica para criar PDF do zero: adicionar páginas, fontes, imagens, tabelas e primitivos gráficos simples.



Instalação:

go get github.com/jung-kurt/gofpdf


Exemplo: criando 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 PDF!") pdf.ImageOptions("logo.png", 10, 20, 30, 0, false, gofpdf.ImageOptions{ImageType: "PNG"}, 0, "") err := pdf.OutputFileAndClose("output.pdf") if err != nil { panic(err) }}


Prós: API minimalista, tamanho pequeno, não requer dependências externas, suporte a Unicode (UTF-8).
Contras: suporte limitado para layouts complexos, sem renderização HTML embutida.



2. maroto — biblioteca de alto nível para relatórios

Maroto é construída sobre gofpdf e adiciona o conceito de "grade" (grid) para criar layouts complexos: tabelas, colunas, legendas e logotipos. Ideal para faturas, notas fiscais e relatórios.



Instalação:

go get github.com/johnfercher/maroto/v2


Exemplo: criando uma fatura com tabela

package main

import ( "github.com/johnfercher/maroto/v2" "github.com/johnfercher/maroto/v2/pkg/components/col" "github.com/johnfercher/maroto/v2/pkg/components/row" "github.com/johnfercher/maroto/v2/pkg/components/text" "github.com/johnfercher/maroto/v2/pkg/core")

func main() { m := maroto.New() m.AddRow(20, text.NewCol(12, "Fatura nº 123")) m.AddRow(10, text.NewCol(12, "Data: 2024-01-15")) // Tabela headers := []string{"Produto", "Qtd", "Preço", "Total"} rows := [][]string{ {"Notebook", "2", "50000", "100000"}, {"Mouse", "5", "1500", "7500"}, } m.AddRow(10, col.New(12).Add(text.New("Tabela de produtos"))) // Para a tabela, use o componente table // m.AddTable(headers, rows) doc, _ := m.Build() doc.Save("invoice.pdf")}


Prós: estilo declarativo, componentes prontos (tabelas, QR codes, gráficos), alinhamento automático.
Contras: mais dependências que gofpdf, alguma redução de desempenho em layouts complexos.



3. unipdf — biblioteca comercial com recursos avançados

UniPDF (da empresa UniDoc) é uma solução profissional para trabalhar com PDF: criação, edição, extração de dados, assinatura, criptografia. Suporta conversão HTML-to-PDF (através do WebKit).



Instalação:

go get github.com/unidoc/unipdf/v3


Pr

Recommendations