Modelo de Documento
Visao Geral
O pacote document (Camada 2) fornece tipos para tamanhos de pagina, unidades, estilos e a arvore de nos do documento. A maioria dos usuarios interage com esses tipos para configuracao em vez de manipulacao direta da arvore.
import "github.com/gpdf-dev/gpdf/document"
Tamanhos 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 e Valores
Value
Uma dimensao com uma unidade:
type Value struct {
Amount float64
Unit Unit
}
Construtores de Unidades
| Funcao | Unidade | Exemplo |
|---|---|---|
Pt(v) | Pontos (1/72 polegada) | Pt(12) — unidade nativa do PDF |
Mm(v) | Milimetros | Mm(20) — margem de 20mm |
Cm(v) | Centimetros | Cm(2.5) — 2,5cm |
In(v) | Polegadas | In(1) — 1 polegada |
Em(v) | Relativo ao tamanho da fonte | Em(2) — 2x tamanho da fonte |
Pct(v) | Porcentagem do pai | 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() converte qualquer unidade para pontos. IsAuto() verifica valores com tamanho automatico.
Edges (Box Model)
Edges
type Edges struct {
Top, Right, Bottom, Left Value
}
UniformEdges
func UniformEdges(v Value) Edges
Cria edges com o mesmo valor em todos os lados:
document.UniformEdges(document.Mm(20)) // 20mm on all sides
Edges Personalizados
document.Edges{
Top: document.Mm(25),
Right: document.Mm(15),
Bottom: document.Mm(25),
Left: document.Mm(15),
}
Style
O struct Style controla todas as propriedades visuais:
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
)
Decoracoes podem ser combinadas com OR bit a bit.
VerticalAlign
const (
VAlignTop VerticalAlign = iota // default
VAlignMiddle
VAlignBottom
)
Usado para alinhamento vertical de celulas de tabela:
template.TableCellVAlign(document.VAlignMiddle)
Metadados do 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 Imagem
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 No
A arvore do documento e composta por nos:
const (
NodeDocument NodeType = iota
NodePage
NodeBox
NodeText
NodeImage
NodeTable
NodeList
NodeRichText
)
A maioria dos usuarios nao interage diretamente com os nos — o template builder os cria automaticamente.
Tipos Geometricos
type Rectangle struct {
X, Y, Width, Height float64
}
type Point struct {
X, Y float64
}