Modelo de documento
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
| Funcion | Unidad | Ejemplo |
|---|---|---|
Pt(v) | Puntos (1/72 pulgada) | Pt(12) — unidad nativa de PDF |
Mm(v) | Milimetros | Mm(20) — margen de 20mm |
Cm(v) | Centimetros | Cm(2.5) — 2.5cm |
In(v) | Pulgadas | In(1) — 1 pulgada |
Em(v) | Relativo al tamano de fuente | Em(2) — 2x tamano de fuente |
Pct(v) | Porcentaje del padre | Pct(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
}