Primitivas PDF
Descripcion general
El paquete pdf (Capa 1) proporciona primitivas PDF de bajo nivel. La mayoria de los usuarios solo necesitan las funciones de color de este paquete — el resto es utilizado internamente por el motor de diseno.
import "github.com/gpdf-dev/gpdf/pdf"
Colores
Los colores son los tipos mas comunmente usados del paquete pdf.
Constructores de color
// RGB (float values 0.0 – 1.0)
pdf.RGB(1.0, 0.5, 0.0) // Orange
// Hex (uint32)
pdf.RGBHex(0xFF6B6B) // Coral
pdf.RGBHex(0x1A237E) // Dark blue
// Grayscale (0.0 = black, 1.0 = white)
pdf.Gray(0.0) // Black
pdf.Gray(0.5) // Medium gray
pdf.Gray(1.0) // White
// CMYK (for print)
pdf.CMYK(0, 1, 1, 0) // Red in CMYK
Colores predefinidos
pdf.Black // Gray(0)
pdf.White // Gray(1)
pdf.Red // RGB(1, 0, 0)
pdf.Green // RGB(0, 1, 0)
pdf.Blue // RGB(0, 0, 1)
pdf.Yellow // RGB(1, 1, 0)
pdf.Cyan // RGB(0, 1, 1)
pdf.Magenta // RGB(1, 0, 1)
Uso de colores
Los colores se usan con las opciones de texto TextColor() y BgColor():
c.Text("Red on yellow",
template.TextColor(pdf.Red),
template.BgColor(pdf.Yellow),
)
Y con las opciones de tabla/linea:
// Table header
template.TableHeaderStyle(
template.TextColor(pdf.White),
template.BgColor(pdf.RGBHex(0x1A237E)),
)
// Line color
template.LineColor(pdf.Blue)
Espacios de color
type ColorSpace int
const (
ColorSpaceRGB ColorSpace = iota
ColorSpaceGray
ColorSpaceCMYK
)
Tipo Color
type Color struct {
R, G, B float64 // RGB components (0.0 – 1.0)
A float64 // Alpha or K (for CMYK)
Space ColorSpace
}
Writer (Avanzado)
El Writer de PDF maneja la creacion de objetos PDF de bajo nivel. La mayoria de los usuarios no necesitaran esto directamente.
type Writer struct {}
func NewWriter(w io.Writer) *Writer
func (pw *Writer) AllocObject() ObjectRef
func (pw *Writer) WriteObject(ref ObjectRef, obj Object) error
func (pw *Writer) RegisterFont(name string, data []byte) error
func (pw *Writer) AddPage(page *PageContent) error
func (pw *Writer) Close() error
func (pw *Writer) SetDocumentInfo(info DocumentInfo)
Objetos PDF (Avanzado)
Tipos de objetos PDF de bajo nivel:
// Scalar types
type Name string
type LiteralString string
type HexString string
type Integer int64
type Real float64
type Boolean bool
type Null struct{}
// Composite types
type Dict map[string]Object
type Array []Object
// Stream (content, images, fonts)
type Stream struct {
Data []byte
Dictionary Dict
}
// Object reference
type ObjectRef struct {
Number int
Generation int
}
Paquete de fuentes (Avanzado)
El subpaquete pdf/font maneja el analisis y subconjunto de fuentes TrueType:
import "github.com/gpdf-dev/gpdf/pdf/font"
// Parse a TrueType font
ttf, err := font.ParseTrueType(data)
// Get font name and metrics
name := ttf.Name()
metrics := ttf.Metrics() // Ascender, Descender, CapHeight, XHeight
// Create a subset with only used glyphs
subset, err := ttf.Subset(runes)
// Measure text width
width := font.MeasureString(ttf, "Hello", 12.0)
// Break text into lines
lines := font.LineBreak(ttf, text, 12.0, maxWidth)
Arquitectura
Layer 3: template ─── Builder API, JSON Schema, Components
│
▼
Layer 2: document ─── Nodes, Box Model, Layout Engine
│
▼
Layer 1: pdf ──────── Writer, Streams, Fonts, Images
│
▼
io.Writer (file, HTTP response, buffer...)
Cada capa depende solo de la capa inferior — nunca hacia arriba.