Styling

Text Options

All text styling is applied through functional options on c.Text():

c.Text("Styled text",
    template.FontSize(18),
    template.Bold(),
    template.TextColor(pdf.RGBHex(0x1A237E)),
)

Available Text Options

OptionDescription
FontSize(size)Font size in points (default: 12)
Bold()Bold weight
Italic()Italic style
FontFamily(name)Use a registered font family
TextColor(color)Text foreground color
BgColor(color)Text background color
AlignLeft()Left alignment (default)
AlignCenter()Center alignment
AlignRight()Right alignment
Underline()Underline decoration
Strikethrough()Strikethrough decoration
LetterSpacing(pts)Extra space between characters
TextIndent(value)First-line indent

Colors

gpdf supports multiple color models:

Predefined Colors

c.Text("Red", template.TextColor(pdf.Red))
c.Text("Green", template.TextColor(pdf.Green))
c.Text("Blue", template.TextColor(pdf.Blue))
c.Text("Yellow", template.TextColor(pdf.Yellow))
c.Text("Cyan", template.TextColor(pdf.Cyan))
c.Text("Magenta", template.TextColor(pdf.Magenta))
┌─────────────────────────────────────────┐
│  Red       ← red                        │
│  Green     ← green                      │
│  Blue      ← blue                       │
│  Yellow    ← yellow                     │
│  Cyan      ← cyan                       │
│  Magenta   ← magenta                    │
└─────────────────────────────────────────┘
ConstantValue
pdf.BlackGray(0)
pdf.WhiteGray(1)
pdf.RedRGB(1, 0, 0)
pdf.GreenRGB(0, 1, 0)
pdf.BlueRGB(0, 0, 1)
pdf.YellowRGB(1, 1, 0)
pdf.CyanRGB(0, 1, 1)
pdf.MagentaRGB(1, 0, 1)

RGB Colors (Float)

RGB values range from 0.0 to 1.0:

c.Text("Orange", template.TextColor(pdf.RGB(1.0, 0.5, 0.0)))
c.Text("Purple", template.TextColor(pdf.RGB(0.5, 0.0, 0.5)))
c.Text("Teal", template.TextColor(pdf.RGB(0.0, 0.5, 0.5)))

Hex Colors

Use standard hex color codes:

c.Text("Coral", template.TextColor(pdf.RGBHex(0xFF6B6B)))
c.Text("Turquoise", template.TextColor(pdf.RGBHex(0x4ECDC4)))
c.Text("Sky Blue", template.TextColor(pdf.RGBHex(0x45B7D1)))
c.Text("Sage", template.TextColor(pdf.RGBHex(0x96CEB4)))

Grayscale

Values from 0.0 (black) to 1.0 (white):

c.Text("Black", template.TextColor(pdf.Gray(0.0)))
c.Text("Dark gray", template.TextColor(pdf.Gray(0.3)))
c.Text("Medium gray", template.TextColor(pdf.Gray(0.5)))
c.Text("Light gray", template.TextColor(pdf.Gray(0.7)))

CMYK Colors

For print-optimized output:

c.Text("CMYK text", template.TextColor(pdf.CMYK(0, 1, 1, 0))) // Red in CMYK

Background Colors

Apply background color swatches with BgColor():

page.AutoRow(func(r *template.RowBuilder) {
    r.Col(3, func(c *template.ColBuilder) {
        c.Text(" Red ", template.TextColor(pdf.White), template.BgColor(pdf.Red))
    })
    r.Col(3, func(c *template.ColBuilder) {
        c.Text(" Green ", template.TextColor(pdf.White), template.BgColor(pdf.Green))
    })
    r.Col(3, func(c *template.ColBuilder) {
        c.Text(" Blue ", template.TextColor(pdf.White), template.BgColor(pdf.Blue))
    })
    r.Col(3, func(c *template.ColBuilder) {
        c.Text(" Yellow ", template.BgColor(pdf.Yellow))
    })
})
┌───────────┬───────────┬───────────┬───────────┐
│ ██ Red ██ │ █ Green █ │ ██ Blue █ │  Yellow   │
│  (white)  │  (white)  │  (white)  │  (black)  │
└───────────┴───────────┴───────────┴───────────┘

Text Decoration

Underline

c.Text("Underlined text for emphasis", template.Underline())

Strikethrough

c.Text("Strikethrough text for deletions", template.Strikethrough())

Combined Decorations

c.Text("Combined underline and strikethrough",
    template.Underline(), template.Strikethrough())

c.Text("Colored underlined text",
    template.Underline(),
    template.TextColor(pdf.RGBHex(0x1565C0)),
    template.FontSize(14))

c.Text("Bold underlined heading",
    template.Bold(), template.Underline(), template.FontSize(16))
┌─────────────────────────────────────────────┐
│  Normal text without decoration             │
│  Underlined text for emphasis               │  ← underline
│  Strikethrough text for deletions           │  ← line through
│  Combined underline and strikethrough       │  ← both
│  Colored underlined text                    │  ← blue, underline
│  Bold underlined heading                    │  ← bold, underline
└─────────────────────────────────────────────┘

Letter Spacing

Control the space between characters:

c.Text("Normal spacing (default)")
c.Text("1pt letter spacing", template.LetterSpacing(1))
c.Text("3pt letter spacing", template.LetterSpacing(3))
c.Text("5pt letter spacing", template.LetterSpacing(5))
c.Text("Tight spacing (-0.5pt)", template.LetterSpacing(-0.5))
┌─────────────────────────────────────────────┐
│  Normal spacing (default)                   │
│  1 p t  l e t t e r  s p a c i n g         │  ← slightly spaced
│  3 p t   l e t t e r   s p a c i n g       │  ← more spaced
│  5 p t    l e t t e r    s p a c i n g     │  ← very spaced
│  Tight spacing (-0.5pt)                     │  ← compressed
└─────────────────────────────────────────────┘

Text Indent

Add first-line indentation to paragraphs:

c.Text("This paragraph has a 24pt first-line indent. "+
    "The rest of the text wraps normally without indentation.",
    template.TextIndent(document.Pt(24)))

c.Text("This paragraph has a larger 48pt indent. "+
    "Useful for formal or academic document styling.",
    template.TextIndent(document.Pt(48)))
┌─────────────────────────────────────────────┐
│      This paragraph has a 24pt first-line   │
│  indent. The rest of the text wraps         │
│  normally without indentation.              │
│                                             │
│              This paragraph has a larger    │
│  48pt indent. Useful for formal or          │
│  academic document styling.                 │
└─────────────────────────────────────────────┘

Next Steps