Referencia API

Modelo de documento

Referencia de API para la capa del modelo de documento (Capa 2)

Descripcion general

El paquete document (Capa 2) proporciona tipos para tamanos de pagina, unidades, estilos y el arbol de nodos del documento. La mayoria de los usuarios interactuan con estos tipos para configuracion en lugar de manipulacion directa del arbol.

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

Tamanos de pagina

var (
    A4     = Size{Width: 595.28, Height: 841.89}   // 210mm x 297mm
    A3     = Size{Width: 841.89, Height: 1190.55}   // 297mm x 420mm
    Letter = Size{Width: 612, Height: 792}           // 8.5" x 11"
    Legal  = Size{Width: 612, Height: 1008}          // 8.5" x 14"
)

Size

type Size struct {
    Width, Height float64  // in points (1pt = 1/72 inch)
}

Unidades y valores

Value

Una dimension con una unidad:

type Value struct {
    Amount float64
    Unit   Unit
}

Constructores de unidades

FuncionUnidadEjemplo
Pt(v)Puntos (1/72 pulgada)Pt(12) — unidad nativa de PDF
Mm(v)MilimetrosMm(20) — margen de 20mm
Cm(v)CentimetrosCm(2.5) — 2.5cm
In(v)PulgadasIn(1) — 1 pulgada
Em(v)Relativo al tamano de fuenteEm(2) — 2x tamano de fuente
Pct(v)Porcentaje del padrePct(50) — 50%
// Usage examples
document.Mm(20)   // 20 millimeters
document.Pt(12)   // 12 points
document.In(0.5)  // half inch
document.Pct(50)  // 50% of parent

Metodos de Value

func (v Value) Resolve(parentSize, fontSize float64) float64
func (v Value) IsAuto() bool

Resolve() convierte cualquier unidad a puntos. IsAuto() verifica valores de tamano automatico.

Bordes (Modelo de caja)

Edges

type Edges struct {
    Top, Right, Bottom, Left Value
}

UniformEdges

func UniformEdges(v Value) Edges

Crea bordes con el mismo valor en todos los lados:

document.UniformEdges(document.Mm(20))  // 20mm on all sides

Bordes personalizados

document.Edges{
    Top:    document.Mm(25),
    Right:  document.Mm(15),
    Bottom: document.Mm(25),
    Left:   document.Mm(15),
}

Estilo

La estructura Style controla todas las propiedades visuales:

type Style struct {
    // Font
    FontFamily     string
    FontSize       float64
    FontWeight     FontWeight    // WeightNormal (400) or WeightBold (700)
    FontStyle      FontStyle     // StyleNormal or StyleItalic

    // Color
    Color          pdf.Color
    Background     *pdf.Color

    // Text layout
    TextAlign      TextAlign     // AlignLeft, AlignCenter, AlignRight, AlignJustify
    LineHeight     float64
    LetterSpacing  float64
    TextIndent     Value
    TextDecoration TextDecoration
    VerticalAlign  VerticalAlign

    // Box model
    Margin  Edges
    Padding Edges
    Border  BorderEdges
}

TextAlign

const (
    AlignLeft    TextAlign = iota  // default
    AlignCenter
    AlignRight
    AlignJustify
)

FontWeight

const (
    WeightNormal FontWeight = 400
    WeightBold   FontWeight = 700
)

TextDecoration

const (
    DecorationNone          TextDecoration = 0
    DecorationUnderline     TextDecoration = 1
    DecorationStrikethrough TextDecoration = 2
    DecorationOverline      TextDecoration = 4
)

Las decoraciones se pueden combinar con OR a nivel de bits.

VerticalAlign

const (
    VAlignTop    VerticalAlign = iota  // default
    VAlignMiddle
    VAlignBottom
)

Se usa para la alineacion vertical de celdas de tabla:

template.TableCellVAlign(document.VAlignMiddle)

Metadatos del documento

type DocumentMetadata struct {
    Title    string
    Author   string
    Subject  string
    Creator  string
    Producer string
}
template.WithMetadata(document.DocumentMetadata{
    Title:  "Quarterly Report",
    Author: "ACME Corp",
})

Tipos de imagen

ImageFitMode

const (
    FitContain  ImageFitMode = iota  // Scale to fit within bounds (preserve ratio)
    FitCover                          // Scale to fill bounds (may crop)
    FitStretch                        // Stretch to fill (distort)
    FitOriginal                       // Use original image dimensions
)

ImageFormat

const (
    ImageFormatJPEG ImageFormat = iota
    ImageFormatPNG
)

Tipos de nodo

El arbol del documento esta compuesto por nodos:

const (
    NodeDocument NodeType = iota
    NodePage
    NodeBox
    NodeText
    NodeImage
    NodeTable
    NodeList
    NodeRichText
)

La mayoria de los usuarios no interactuan con los nodos directamente — el constructor de templates los crea automaticamente.

Tipos geometricos

type Rectangle struct {
    X, Y, Width, Height float64
}

type Point struct {
    X, Y float64
}