OutlinedText.vb
''
'' This code is part of GrapeCity Documents for PDF samples.
'' Copyright (c) GrapeCity, Inc. All rights reserved.
''
Imports System.IO
Imports System.Drawing
Imports System.Collections.Generic
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Text
Imports GrapeCity.Documents.Drawing

'' This sample shows how to render text with stroked glyph outlines,
'' and with glyphs filled using solid or gradient brushes.
Public Class OutlinedText
    Sub CreatePDF(ByVal stream As Stream)
        Dim doc = New GcPdfDocument()
        Dim page = doc.NewPage()
        Dim g = page.Graphics

        Dim rc = Util.AddNote(
            "This sample shows how to draw text with stroked glyph outlines, " +
            "and how to fill glyphs with solid or gradient brushes.",
            page)

        Dim tl = g.CreateTextLayout()

        '' Set text flow and other layout properties:
        tl.MaxWidth = page.Size.Width
        tl.MaxHeight = page.Size.Height
        tl.MarginAll = 72
        tl.MarginTop = rc.Bottom + 36

        Dim rcBack = New RectangleF(tl.MarginLeft, tl.MarginTop, tl.MaxWidth.Value - tl.MarginLeft - tl.MarginRight, tl.MaxHeight.Value - tl.MarginTop - tl.MarginBottom)
        g.DrawImage(Image.FromFile(Path.Combine("Resources", "Images", "purples.jpg")), rcBack, Nothing, ImageAlign.StretchImage)

        Dim tf0 = New TextFormat() With
        {
            .ForeColor = Color.LemonChiffon,
            .Hollow = True,
            .Font = Font.FromFile(Path.Combine("Resources", "Fonts", "GOTHICB.TTF")),
            .FontSize = 48
        }
        tl.AppendLine("Hollow Text", tf0)

        Dim tf1 = New TextFormat() With
        {
            .StrokePen = Color.DarkMagenta,
            .FillBrush = New SolidBrush(Color.Yellow),
            .Font = Font.FromFile(Path.Combine("Resources", "Fonts", "FoglihtenNo07.otf")),
            .FontSize = 48
        }
        tl.AppendLine("Outlined Text", tf1)

        Dim grad0 = New LinearGradientBrush(Color.Red, New PointF(0, 0), Color.Blue, New PointF(1, 0))
        Dim tf2 = New TextFormat() With
        {
            .FillBrush = grad0,
            .Font = Font.FromFile(Path.Combine("Resources", "Fonts", "cambriab.ttf")),
            .FontSize = 48
        }
        tl.AppendLine("Gradient Fill", tf2)

        Dim grad1 = New LinearGradientBrush(Color.Red, Color.Purple)
        grad1.GradientStops = New List(Of GradientStop)()
        grad1.GradientStops.Add(New GradientStop(Color.Orange, 1 / 6.0F))
        grad1.GradientStops.Add(New GradientStop(Color.Yellow, 2 / 6.0F))
        grad1.GradientStops.Add(New GradientStop(Color.Green, 3 / 6.0F))
        grad1.GradientStops.Add(New GradientStop(Color.Cyan, 4 / 6.0F))
        grad1.GradientStops.Add(New GradientStop(Color.Blue, 5 / 6.0F))
        Dim tf3 = New TextFormat() With
        {
            .FillBrush = grad1,
            .Font = Font.FromFile(Path.Combine("Resources", "Fonts", "cambriab.ttf")),
            .FontSize = 48
        }
        tl.AppendLine("Multi-stop gradient", tf3)

        Dim tf4 = New TextFormat(tf3) With
        {
            .StrokePen = Color.GreenYellow
        }
        tl.AppendLine("Multi-stop gradient with outline", tf4)

        Dim tf5 = New TextFormat(tf4)
        tf5.Hollow = True
        tf5.StrokePen = New Pen(Color.DarkRed, 1)
        tl.AppendLine("Text outlined with 1pt wide pen", tf5)

        '' It is not necessary to call PerformLayout() for a newly created TextLayout
        '' or after a call to TextLayout.Clear():
        g.DrawTextLayout(tl, PointF.Empty)

        '' Done
        doc.Save(stream)
    End Sub
End Class