TextAlign.vb
''
'' This code is part of Document Solutions for PDF demos.
'' Copyright (c) MESCIUS inc. All rights reserved.
''
Imports System.IO
Imports System.Drawing
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Text
Imports GrapeCity.Documents.Drawing

'' Demonstrates text alignment options (horizontal alignment for LRT text):
'' Left / Centered / Right / Justified.
Public Class TextAlign
    Function CreatePDF(ByVal stream As Stream) As Integer
        '' Helper function to generate a paragraph of random text:
        Dim makePara As Func(Of String) =
            Function()
                Return Util.LoremIpsum(1, 3, 4, 15, 20)
            End Function
        ''
        Dim doc = New GcPdfDocument()
        Dim g = doc.NewPage().Graphics
        '' Using Graphics.CreateTextLayout() ensures that TextLayout's resolution
        '' is set to the same value as that of the graphics (which is 72 dpi by default):
        Dim tl = g.CreateTextLayout()
        tl.DefaultFormat.Font = StandardFonts.Times
        tl.DefaultFormat.FontSize = 12
        '' Set layout size (full page with 1" margins):
        tl.MaxWidth = doc.Pages.Last.Size.Width - 72 * 2
        tl.MaxHeight = doc.Pages.Last.Size.Height - 72 * 2
        '' Strong text format for 'headers':
        Dim tf = New TextFormat(tl.DefaultFormat) With {.Font = StandardFonts.TimesBold}
        '' Insertion point:
        Dim ip = New PointF(72, 72)
        '' TextAlignment controls how text is aligned horizontally within the layout rectangle.
        '' We render 5 paragraphs with different alignments.
        '' Leading:
        tl.TextAlignment = TextAlignment.Leading
        tl.Append("TextAlignment.Leading: ", tf)
        tl.Append(makePara())
        tl.PerformLayout(True)
        g.DrawTextLayout(tl, ip)
        '' Advance insertion point, adding one line's height between paragraphs:
        ip.Y += tl.ContentHeight + tl.Lines(0).Height
        '' Center:
        tl.Clear()
        tl.TextAlignment = TextAlignment.Center
        tl.Append("TextAlignment.Center: ", tf)
        tl.Append(makePara())
        tl.PerformLayout(True)
        g.DrawTextLayout(tl, ip)
        '' Advance insertion point, adding one line's height between paragraphs:
        ip.Y += tl.ContentHeight + tl.Lines(0).Height
        '' Trailing:
        tl.Clear()
        tl.TextAlignment = TextAlignment.Trailing
        tl.Append("TextAlignment.Trailing: ", tf)
        tl.Append(makePara())
        tl.PerformLayout(True)
        g.DrawTextLayout(tl, ip)
        '' Advance insertion point, adding one line's height between paragraphs:
        ip.Y += tl.ContentHeight + tl.Lines(0).Height
        '' Justified:
        tl.Clear()
        tl.TextAlignment = TextAlignment.Justified
        tl.Append("TextAlignment.Justified: ", tf)
        tl.Append(makePara())
        tl.PerformLayout(True)
        g.DrawTextLayout(tl, ip)
        '' Advance insertion point, adding one line's height between paragraphs:
        ip.Y += tl.ContentHeight + tl.Lines(0).Height
        '' Distributed:
        tl.Clear()
        tl.TextAlignment = TextAlignment.Distributed
        tl.Append("TextAlignment.Distributed: ", tf)
        tl.Append(makePara())
        tl.PerformLayout(True)
        g.DrawTextLayout(tl, ip)
        ''
        '' Done:
        doc.Save(stream)
        Return doc.Pages.Count
    End Function
End Class