Fusion de PDF

Descripcion general

Since v1.0.2

gpdf puede fusionar multiples documentos PDF en uno. Puede combinar documentos completos o extraer rangos de paginas especificos de cada fuente.

Casos de uso comunes:

  • Combinar una portada con contenido generado
  • Fusionar facturas en un solo paquete
  • Extraer paginas especificas de un documento grande
  • Ensamblar informes de multiples fuentes

Fusion basica

Use gpdf.Merge() para combinar dos o mas 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 contiene bytes PDF sin procesar. Por defecto, se incluyen todas las paginas de cada fuente.

Extraccion de rango de paginas

Use PageRange para incluir solo paginas especificas de una fuente (base 1, inclusivo):

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

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

Reglas de PageRange:

  • From: 0 u omitido — comienza desde la primera pagina
  • To: 0 u omitido — llega hasta la ultima pagina
  • Valor cero PageRange{} — incluye todas las paginas

Configurar metadatos

Use WithMergeMetadata para establecer la informacion del documento en la salida fusionada:

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

Parametros: title, author, producer.

Fusion + Superposicion

Combine la fusion con la superposicion para agregar numeros de pagina o marcas de agua despues de fusionar:

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

// Paso 2: Abrir el resultado fusionado y agregar 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 de API

Funcion / TipoDescripcion
gpdf.Merge(sources, opts...)Fusionar multiples PDFs en uno
gpdf.SourcePDF de entrada: Data []byte + Pages PageRange
gpdf.PageRangeRango inclusivo base 1: From, To (0 = predeterminado)
gpdf.WithMergeMetadata(title, author, producer)Establecer metadatos del documento en la salida

Proximos pasos