Fusao de PDF

Visao Geral

Since v1.0.2

O gpdf pode mesclar multiplos documentos PDF em um so. Voce pode combinar documentos inteiros ou extrair intervalos de paginas especificos de cada fonte.

Casos de uso comuns:

  • Combinar uma pagina de capa com conteudo gerado
  • Mesclar faturas em um unico pacote
  • Extrair paginas especificas de um documento grande
  • Montar relatorios de multiplas fontes

Fusao Basica

Use gpdf.Merge() para combinar dois ou mais PDFs:

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

cover, _ := os.ReadFile("cover.pdf")
body, _ := os.ReadFile("body.pdf")

merged, err := gpdf.Merge([]gpdf.Source{
    {Data: cover},
    {Data: body},
})
if err != nil {
    log.Fatal(err)
}

os.WriteFile("output.pdf", merged, 0644)

Cada Source contem bytes PDF brutos. Por padrao, todas as paginas de cada fonte sao incluidas.

Extracao de Intervalo de Paginas

Use PageRange para incluir apenas paginas especificas de uma fonte (base 1, inclusivo):

full, _ := os.ReadFile("report.pdf")

// Extrair paginas 2 a 4
extracted, err := gpdf.Merge([]gpdf.Source{
    {Data: full, Pages: gpdf.PageRange{From: 2, To: 4}},
})

Regras do PageRange:

  • From: 0 ou omitido — comeca da primeira pagina
  • To: 0 ou omitido — vai ate a ultima pagina
  • Valor zero PageRange{} — inclui todas as paginas

Definir Metadados

Use WithMergeMetadata para definir informacoes do documento na saida mesclada:

merged, err := gpdf.Merge(
    []gpdf.Source{
        {Data: cover},
        {Data: body},
        {Data: appendix},
    },
    gpdf.WithMergeMetadata("Policy Bundle", "Example Ltd", "gpdf"),
)

Parametros: title, author, producer.

Fusao + Overlay

Combine fusao com overlay para adicionar numeros de pagina ou marcas d'agua apos a mesclagem:

// Passo 1: Mesclar documentos
merged, _ := gpdf.Merge([]gpdf.Source{
    {Data: cover},
    {Data: body},
})

// Passo 2: Abrir resultado mesclado e adicionar numeros de pagina
doc, _ := gpdf.Open(merged)
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, _ := doc.Save()
os.WriteFile("final.pdf", result, 0644)

Referencia da API

Funcao / TipoDescricao
gpdf.Merge(sources, opts...)Mesclar multiplos PDFs em um
gpdf.SourcePDF de entrada: Data []byte + Pages PageRange
gpdf.PageRangeIntervalo inclusivo base 1: From, To (0 = padrao)
gpdf.WithMergeMetadata(title, author, producer)Definir metadados do documento na saida

Proximos Passos