Guía

Diseno de cuadricula

Uso del sistema de cuadricula de 12 columnas

Descripcion general

gpdf utiliza un sistema de cuadricula de 12 columnas inspirado en Bootstrap. Cada fila se divide en 12 columnas iguales, y usted especifica cuantas columnas abarca cada bloque de contenido.

Configuraciones de columnas

Ancho completo (12 columnas)

page.AutoRow(func(r *template.RowBuilder) {
    r.Col(12, func(c *template.ColBuilder) {
        c.Text("Full width content", template.BgColor(pdf.RGBHex(0xE3F2FD)))
    })
})
┌─────────────────────────────────────────────────┐
│  Full width content                  Col 12     │
└─────────────────────────────────────────────────┘

Dos columnas iguales (6 + 6)

page.AutoRow(func(r *template.RowBuilder) {
    r.Col(6, func(c *template.ColBuilder) {
        c.Text("Col 6 (left)", template.BgColor(pdf.RGBHex(0xE8F5E9)))
    })
    r.Col(6, func(c *template.ColBuilder) {
        c.Text("Col 6 (right)", template.BgColor(pdf.RGBHex(0xFFF3E0)))
    })
})
┌────────────────────────┬────────────────────────┐
│  Col 6 (left)          │  Col 6 (right)         │
└────────────────────────┴────────────────────────┘

Tres columnas iguales (4 + 4 + 4)

page.AutoRow(func(r *template.RowBuilder) {
    r.Col(4, func(c *template.ColBuilder) {
        c.Text("Col 4", template.BgColor(pdf.RGBHex(0xFCE4EC)))
    })
    r.Col(4, func(c *template.ColBuilder) {
        c.Text("Col 4", template.BgColor(pdf.RGBHex(0xF3E5F5)))
    })
    r.Col(4, func(c *template.ColBuilder) {
        c.Text("Col 4", template.BgColor(pdf.RGBHex(0xE8EAF6)))
    })
})
┌────────────────┬────────────────┬────────────────┐
│  Col 4         │  Col 4         │  Col 4         │
└────────────────┴────────────────┴────────────────┘

Cuatro columnas iguales (3 + 3 + 3 + 3)

page.AutoRow(func(r *template.RowBuilder) {
    r.Col(3, func(c *template.ColBuilder) {
        c.Text("Col 3", template.BgColor(pdf.RGBHex(0xE0F7FA)))
    })
    r.Col(3, func(c *template.ColBuilder) {
        c.Text("Col 3", template.BgColor(pdf.RGBHex(0xE0F2F1)))
    })
    r.Col(3, func(c *template.ColBuilder) {
        c.Text("Col 3", template.BgColor(pdf.RGBHex(0xFFF9C4)))
    })
    r.Col(3, func(c *template.ColBuilder) {
        c.Text("Col 3", template.BgColor(pdf.RGBHex(0xFFECB3)))
    })
})
┌───────────┬───────────┬───────────┬───────────┐
│  Col 3    │  Col 3    │  Col 3    │  Col 3    │
└───────────┴───────────┴───────────┴───────────┘

Barra lateral + Principal (3 + 9)

page.AutoRow(func(r *template.RowBuilder) {
    r.Col(3, func(c *template.ColBuilder) {
        c.Text("Sidebar (3)", template.BgColor(pdf.RGBHex(0xD7CCC8)))
    })
    r.Col(9, func(c *template.ColBuilder) {
        c.Text("Main content (9)", template.BgColor(pdf.RGBHex(0xF5F5F5)))
    })
})
┌───────────┬─────────────────────────────────────┐
│  Sidebar  │  Main content (9)                   │
│  (3)      │                                     │
└───────────┴─────────────────────────────────────┘

Articulo + Panel (8 + 4)

page.AutoRow(func(r *template.RowBuilder) {
    r.Col(8, func(c *template.ColBuilder) {
        c.Text("Article area (8)", template.BgColor(pdf.RGBHex(0xE1F5FE)))
    })
    r.Col(4, func(c *template.ColBuilder) {
        c.Text("Side panel (4)", template.BgColor(pdf.RGBHex(0xFBE9E7)))
    })
})
┌─────────────────────────────────┬───────────────┐
│  Article area (8)               │  Side panel   │
│                                 │  (4)          │
└─────────────────────────────────┴───────────────┘

Tipos de fila

Filas con altura automatica

AutoRow ajusta su altura para adaptarse al contenido:

page.AutoRow(func(r *template.RowBuilder) {
    r.Col(12, func(c *template.ColBuilder) {
        c.Text("This row's height is determined by its content")
    })
})

Filas con altura fija

Row toma un valor de altura explicito:

// 30mm tall row
page.Row(document.Mm(30), func(r *template.RowBuilder) {
    r.Col(12, func(c *template.ColBuilder) {
        c.Text("This row is 30mm tall", template.BgColor(pdf.RGBHex(0xE3F2FD)))
    })
})

// 50mm tall row with two columns
page.Row(document.Mm(50), func(r *template.RowBuilder) {
    r.Col(6, func(c *template.ColBuilder) {
        c.Text("Left: 50mm row", template.BgColor(pdf.RGBHex(0xE8F5E9)))
    })
    r.Col(6, func(c *template.ColBuilder) {
        c.Text("Right: 50mm row", template.BgColor(pdf.RGBHex(0xFFF3E0)))
    })
})
┌─────────────────────────────────────────────────┐
│  This row is 30mm tall                          │
│                                    height: 30mm │
└─────────────────────────────────────────────────┘

┌────────────────────────┬────────────────────────┐
│  Left: 50mm row        │  Right: 50mm row       │
│                        │                        │
│                        │                        │
│               height: 50mm                      │
└────────────────────────┴────────────────────────┘

Multiples contenidos en columnas

Cada columna puede contener multiples elementos apilados verticalmente:

page.AutoRow(func(r *template.RowBuilder) {
    r.Col(6, func(c *template.ColBuilder) {
        c.Text("Left column - line 1")
        c.Text("Left column - line 2")
        c.Text("Left column - line 3")
    })
    r.Col(6, func(c *template.ColBuilder) {
        c.Text("Right column - line 1")
        c.Text("Right column - line 2")
        c.Text("Right column - line 3")
    })
})
┌────────────────────────┬────────────────────────┐
│  Left column - line 1  │  Right column - line 1 │
│  Left column - line 2  │  Right column - line 2 │
│  Left column - line 3  │  Right column - line 3 │
└────────────────────────┴────────────────────────┘

Tamanos de pagina

ConstanteTamanoDimensiones
document.A4A4210mm x 297mm
document.A3A3297mm x 420mm
document.LetterUS Letter8.5" x 11"
document.LegalUS Legal8.5" x 14"

Unidades

gpdf soporta multiples unidades para dimensiones:

FuncionUnidadEjemplo
document.Pt(v)Puntos (1/72 pulgada)document.Pt(12)
document.Mm(v)Milimetrosdocument.Mm(20)
document.Cm(v)Centimetrosdocument.Cm(2.5)
document.In(v)Pulgadasdocument.In(1)
document.Em(v)Relativo al tamano de fuentedocument.Em(2)
document.Pct(v)Porcentaje del padredocument.Pct(50)

Margenes personalizados

// Uniform margins
template.WithMargins(document.UniformEdges(document.Mm(20)))

// Custom margins per side
template.WithMargins(document.Edges{
    Top:    document.Mm(25),
    Right:  document.Mm(15),
    Bottom: document.Mm(25),
    Left:   document.Mm(15),
})

Siguientes pasos