Pacote gpdf

Visao Geral

O pacote gpdf e uma facade que re-exporta funcoes comumente usadas das camadas internas. Voce pode importar gpdf por conveniencia ou importar os pacotes especificos diretamente.

import "github.com/gpdf-dev/gpdf"

// Using facade
doc := gpdf.NewDocument(gpdf.WithPageSize(gpdf.A4))
import (
    "github.com/gpdf-dev/gpdf/template"
    "github.com/gpdf-dev/gpdf/document"
)

// Using packages directly (recommended)
doc := template.New(template.WithPageSize(document.A4))

Funcoes

NewDocument

func NewDocument(opts ...template.Option) *template.Document

Cria um novo builder de documento PDF. Este e o ponto de entrada principal.

doc := gpdf.NewDocument(
    gpdf.WithPageSize(gpdf.A4),
    gpdf.WithMargins(document.UniformEdges(document.Mm(20))),
)

FromJSON

func FromJSON(schema []byte, data any, opts ...template.Option) (*template.Document, error)

Cria um Document a partir de uma definicao JSON schema com vinculacao opcional de dados via Go template.

doc, err := gpdf.FromJSON(schema, map[string]any{"title": "Report"})

FromTemplate

func FromTemplate(tmpl *template.Template, data any, opts ...template.Option) (*template.Document, error)

Cria um Document executando um Go template pre-analisado que produz saida em JSON schema.

TemplateFuncMap

func TemplateFuncMap() template.FuncMap

Retorna funcoes auxiliares (toJSON, etc.) para uso ao analisar Go templates.

Opcoes do Documento

FuncaoDescricao
WithPageSize(size)Definir dimensoes da pagina (A4, A3, Letter, Legal)
WithMargins(edges)Definir margens da pagina
WithFont(family, data)Registrar uma fonte TrueType (aceita []byte)
WithDefaultFont(family, size)Definir a familia e tamanho de fonte padrao
WithMetadata(meta)Definir metadados do documento
WithEncryption(opts...)Habilitar criptografia AES-256
WithPDFA(opts...)Habilitar conformidade PDF/A

Metadados do Documento

gpdf.WithMetadata(document.DocumentMetadata{
    Title:   "Invoice #INV-2026-001",
    Author:  "ACME Corporation",
    Subject: "Monthly Invoice",
    Creator: "gpdf v1.0.4",
})

Tamanhos de Pagina

ConstanteDimensoes
gpdf.A4 / document.A4210mm x 297mm (595.28pt x 841.89pt)
gpdf.A3 / document.A3297mm x 420mm (841.89pt x 1190.55pt)
gpdf.Letter / document.Letter8.5" x 11" (612pt x 792pt)
gpdf.Legal / document.Legal8.5" x 14" (612pt x 1008pt)

Metodos do Document

AddPage

func (d *Document) AddPage() *PageBuilder

Adiciona uma nova pagina e retorna seu builder.

func (d *Document) Header(fn func(p *PageBuilder))
func (d *Document) Footer(fn func(p *PageBuilder))

Define conteudo que se repete em cada pagina.

Generate / Render

func (d *Document) Generate() ([]byte, error)
func (d *Document) Render(w io.Writer) error

Generate() retorna o PDF como um slice de bytes. Render() escreve diretamente em um io.Writer.

Metodos do PageBuilder

Row

func (p *PageBuilder) Row(height document.Value, fn func(r *RowBuilder))
func (p *PageBuilder) AutoRow(fn func(r *RowBuilder))

Row() cria uma linha com altura fixa. AutoRow() cria uma linha que se ajusta ao conteudo.

Metodos do RowBuilder

Col

func (r *RowBuilder) Col(span int, fn func(c *ColBuilder))

Cria uma coluna ocupando span de 12 colunas do grid.

Metodos do ColBuilder

MetodoDescricao
Text(text, opts...)Adicionar texto com opcoes de estilo
Image(data, opts...)Adicionar uma imagem (bytes JPEG ou PNG)
Table(headers, rows, opts...)Adicionar uma tabela
List(items, opts...)Adicionar uma lista nao ordenada
OrderedList(items, opts...)Adicionar uma lista ordenada
Line(opts...)Adicionar uma linha horizontal
Spacer(height)Adicionar espacamento vertical
QRCode(data, opts...)Adicionar um QR code
Barcode(data, opts...)Adicionar um codigo de barras (Code 128)
RichText(fn)Adicionar texto inline com estilos mistos
PageNumber(opts...)Numero da pagina atual
TotalPages(opts...)Contagem total de paginas

Opcoes de QR Code

FuncaoDescricao
QRSize(value)Tamanho de exibicao (largura = altura)
QRErrorCorrection(level)Correcao de erro: LevelL, LevelM, LevelQ, LevelH
QRScale(s)Pixels por modulo QR

Opcoes de Codigo de Barras

FuncaoDescricao
BarcodeWidth(value)Largura de exibicao
BarcodeHeight(value)Altura de exibicao
BarcodeFormat(format)Formato do codigo de barras (padrao: Code 128)

Operacoes com PDF Existente

Open

func Open(data []byte, opts ...template.Option) (*template.ExistingDocument, error)

Abre um PDF existente para leitura e modificacao. Retorna um ExistingDocument que suporta operacoes de overlay via Incremental Update (append nao destrutivo).

doc, err := gpdf.Open(pdfBytes)

Metodos do ExistingDocument

MetodoDescricao
PageCount() (int, error)Retorna o numero de paginas no PDF
Overlay(pageIndex int, fn func(p *PageBuilder)) errorAdicionar conteudo sobre uma pagina especifica (indice base 0)
EachPage(fn func(pageIndex int, p *PageBuilder)) errorAdicionar conteudo sobre todas as paginas
FlattenForms() errorAchatar todos os campos AcroForm em conteudo de pagina estatico Since v1.0.4
Save() ([]byte, error)Retorna o PDF modificado como slice de bytes
doc, err := gpdf.Open(pdfBytes, gpdf.WithFont("NotoSans", fontData))

// Add watermark on page 1
doc.Overlay(0, func(p *template.PageBuilder) {
    p.Absolute(document.Mm(40), document.Mm(120), func(c *template.ColBuilder) {
        c.Text("DRAFT", template.FontSize(72),
            template.TextColor(pdf.Gray(0.85)))
    })
})

// Add page numbers on every page
count, _ := doc.PageCount()
doc.EachPage(func(i int, p *template.PageBuilder) {
    p.Absolute(document.Mm(170), document.Mm(285), func(c *template.ColBuilder) {
        c.Text(fmt.Sprintf("%d / %d", i+1, count),
            template.FontSize(10), template.AlignRight())
    }, template.AbsoluteWidth(document.Mm(20)))
})

result, err := doc.Save()

Fusao de PDF Since v1.0.2

Merge

func Merge(sources []Source, opts ...MergeOption) ([]byte, error)

Combina paginas de multiplas fontes PDF em um unico PDF de saida.

Source

type Source struct {
    Data  []byte    // bytes PDF brutos
    Pages PageRange // paginas a incluir; valor zero = todas as paginas
}

PageRange

type PageRange struct {
    From int  // pagina inicial base 1; 0 = primeira pagina
    To   int  // pagina final base 1; 0 = ultima pagina
}

Opcoes de fusao

FuncaoDescricao
WithMergeMetadata(title, author, producer)Definir informacoes do documento (titulo, autor, produtor) na saida mesclada

Construtores de Componentes

FuncaoDescricao
NewInvoice(data)Criar um PDF de fatura
NewReport(data)Criar um PDF de relatorio
NewLetter(data)Criar um PDF de carta comercial

Veja Componentes para uso detalhado.