Guide

Styling

Colors, text decoration, and typography options

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.                 │
└─────────────────────────────────────────────┘

Rounded Corners

Since v1.0.15

Round the background of a box, a text element or an image:

c.Text("Pill label",
    template.BgColor(pdf.RGBHex(0xFFE0B2)),
    template.TextPadding(document.UniformEdges(document.Mm(2))),
    template.WithTextRadius(document.Pt(8)),
)

See Rounded Corners for boxes and images.

Opacity

Since v1.0.15

Make any element translucent with WithTextOpacity, WithImageOpacity or WithBoxOpacity (0.0 transparent – 1.0 opaque):

c.Text("Text at 40%", template.FontSize(24), template.WithTextOpacity(0.4))

Page Backgrounds

Since v1.0.15

Put a color or an image (PNG, JPEG or SVG) beneath every page with WithBackgroundColor and WithBackgroundImage — see Page Background.

Next Steps