[go: up one dir, main page]

Escreva Go. Receba um PDF.

gpdf é uma biblioteca PDF para Go sem dependências além da biblioteca padrão. Monte páginas numa grade de 12 colunas, incorpore fontes japonesas, chinesas e coreanas e renderize uma página em cerca de 13 µs.

$go get github.com/gpdf-dev/gpdf
Como funciona
invoice.go
doc := template.New(template.WithPageSize(document.A4))
page := doc.AddPage()

page.AutoRow(func(r *template.RowBuilder) {
    r.Col(6, func(c *template.ColBuilder) {
        c.Text("ACME Corporation", template.FontSize(24),
            template.Bold(), template.TextColor(navy))
    })
    r.Col(6, func(c *template.ColBuilder) {
        c.Text("INVOICE", template.FontSize(28),
            template.Bold(), template.AlignRight())
    })
})

page.AutoRow(func(r *template.RowBuilder) {
    r.Col(12, func(c *template.ColBuilder) {
        c.Table(header, items,
            template.ColumnWidths(40, 15, 20, 25),
            template.TableStripe(pdf.RGBHex(0xF5F5F5)),
        )
    })
})

data, err := doc.Generate()
invoice.pdfAbrir o PDF
Fatura em PDF gerada pelo gpdf: cabeçalho da empresa, dados do cliente, tabela de itens listrada e totais

Go puro, nada mais.

O go.mod lista só o Go. Sem cgo, sem navegador headless, sem binário nativo ao lado do seu serviço.

Um layout que você já conhece.

Linhas e uma grade de 12 colunas fluem pelas páginas. Tabelas quebram entre páginas e o texto se ajusta sozinho.

Qualquer escrita, incorporada.

As fontes TrueType são reduzidas aos glifos usados, então japonês, chinês e coreano ficam iguais em qualquer servidor.

Benchmarks

Rápido o bastante para gerar dentro da requisição.

Os mesmos quatro documentos feitos com gpdf, go-pdf/fpdf, signintech/gopdf e maroto v2. Tempo e memória por documento; menor é melhor.

Uma página
Uma página A4 com título e parágrafo
gpdf
x
13 µs
fpdf
x
132 µs
gopdf
x
423 µs
maroto v2
x
237 µs
10–33× mais rápidotempo
Tabela (4×10)
Uma tabela estilizada com linha de cabeçalho
gpdf
x
108 µs
fpdf
x
241 µs
gopdf
x
835 µs
maroto v2
x
8.600 µs
2–80× mais rápidotempo
100 páginas
A mesma página repetida 100 vezes
gpdf
x
683 µs
fpdf
x
11.700 µs
gopdf
x
8.600 µs
maroto v2
x
19.800 µs
13–29× mais rápidotempo
Documento complexo
Títulos, tabelas e texto misturados
gpdf
x
133 µs
fpdf
x
254 µs
gopdf
x
997 µs
maroto v2
x
10.400 µs
2–78× mais rápidotempo
Uma página, memória
Alocado ao montar uma página
gpdf
x
16 KB
fpdf
x
1.200 KB
gopdf
x
1.800 KB
maroto v2
x
61 KB
4–113× menos memóriamemória
100 páginas, memória
Alocado ao montar 100 páginas
gpdf
x
909 KB
fpdf
x
121.000 KB
gopdf
x
83.000 KB
maroto v2
x
4.000 KB
4–133× menos memóriamemória

Mediana de 5 execuções, 100 iterações cada. Apple M1, Go 1.25. O código do benchmark está no repositório do gpdf.

Ver o código do benchmark

Arquitetura nativa em Go

Feito em Go. Nada mais para rodar.

Muitas soluções de PDF para Go saem da linguagem: um navegador headless num sidecar, um serviço HTML para PDF via HTTP ou um binding para uma biblioteca nativa. Cada uma adiciona um runtime para implantar, corrigir e monitorar.

O gpdf é escrito em Go desde a primeira linha. Ele compila dentro do seu binário, roda onde o Go roda e toda a sua árvore de dependências é a biblioteca padrão — sua equipe de segurança não tem nada extra para auditar.

Um go get, um binário, a mesma saída em desenvolvimento e em produção.

Configuração típica

Seu app em Go

Chamada HTTP ou binding cgo

Navegador headless · JVM · biblioteca nativa

Mais um runtime para implantar, corrigir e monitorar.

gpdf

Seu app em Go

go get

github.com/gpdf-dev/gpdf

Um binário · só stdlib · sem cgo

Roda em

LinuxmacOSWindowsDockerServerless

CJK de primeira classe

Japonês, chinês e coreano, exatamente como escritos.

Muitas bibliotecas PDF tratam CJK como detalhe. O gpdf foi feito com ele desde o primeiro dia.

  • Incorpore qualquer fonte TrueType; só os glifos usados vão para o arquivo.

  • Misture japonês, chinês, coreano e texto latino no mesmo parágrafo ou tabela.

  • Sem tofu (□), sem mojibake, sem depender das fontes instaladas no servidor.

Ler o guia de fontes
Texto em japonês renderizado pelo gpdf com um subconjunto incorporado da Noto Sans JPUma tabela do gpdf misturando japonês, chinês e coreano

日本語 · 中文 · 한국어

Mais que layout.

Arquivamento, segurança e pós-processamento vêm no mesmo módulo — ainda só com a biblioteca padrão do Go.

PDF/A

Saída PDF/A-1b e PDF/A-2b com metadados XMP, para documentos que precisam ser legíveis por décadas.

Criptografia AES-256

Senhas de proprietário e de usuário com controle de impressão, cópia e edição.

Assinaturas digitais

Assinaturas PKCS#7 com carimbos de tempo RFC 3161 no PDF pronto.

Cabeçalhos e rodapés

Cabeçalhos, rodapés e números de página repetidos em todas as páginas.

QR codes e códigos de barras

QR e Code 128 gerados nativamente, ao lado de imagens PNG e JPEG.

Juntar e dividir

Combine PDFs ou extraia intervalos de páginas sem sair do Go.

E mais…

Sobreponha conteúdo a PDFs existentes e achate campos AcroForm preenchidos.

Ver os exemplos

gpdf e as alternativas

Escolher uma biblioteca PDF vai além dos recursos.

O que você implanta, pelo que paga e o que precisa manter atualizado.

gpdfSDKs comerciais de GoHTML para PDF (navegador headless)
LicençaMIT, grátis para uso comercialLicença paga ou chave por usoCódigo aberto, mas você roda o navegador
DependênciasSó a biblioteca padrão do GoMódulos do fornecedorUm navegador em cada imagem
ImplantaçãoDentro do seu binário GoBinário Go mais chave de licençaSidecar ou serviço separado
Texto CJKNativo, com subconjuntosDepende da configuração de fontesDepende das fontes da imagem
Uma páginaCerca de 13 µsVaria por produtoUma renderização de navegador por requisição

Do go get à produção.

Escolha a entrada que combina com sua stack. As três usam o mesmo motor de renderização.

Instale em uma linha

go get github.com/gpdf-dev/gpdf. Funciona com Go 1.22 ou superior.

Builder API

Go fluente e tipado: PageBuilder → RowBuilder → ColBuilder.

Schema JSON

Descreva documentos em JSON e envie de qualquer serviço ou linguagem.

Templates Go

Conduza o schema JSON com text/template — uma fonte para milhares de documentos.

Templates prontos

Faturas, recibos e orçamentos para copiar e adaptar.

Exemplos executáveis

Cada exemplo é um teste que gera um PDF real, de tabelas a assinaturas.

Testes com arquivos golden

Antes de cada versão, cada exemplo é comparado byte a byte com um PDF salvo.

Conformidade verificada

A CI valida os arquivos gerados contra a especificação PDF.

Go 1.22 a 1.26

A CI roda toda a suíte com o detector de corrida em cada versão do Go suportada.

FAQ

Perguntas antes de publicar

gpdf é uma biblioteca de geração de PDF com licença MIT, escrita em Go puro e sem dependências externas. Ela monta páginas numa grade de 12 colunas e incorpora fontes TrueType, incluindo japonês, chinês e coreano.

Publique seu primeiro PDF hoje.

Um go get e algumas linhas de Go.