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

FuncaoUnidadeExemplo
Pt(v)Pontos (1/72 polegada)Pt(12) — unidade nativa do PDF
Mm(v)MilimetrosMm(20) — margem de 20mm
Cm(v)CentimetrosCm(2.5) — 2,5cm
In(v)PolegadasIn(1) — 1 polegada
Em(v)Relativo ao tamanho da fonteEm(2) — 2x tamanho da fonte
Pct(v)Porcentagem do paiPct(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
}