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

Public Class TextJustifyRules
    Public Function CreatePDF(ByVal stream As Stream) As Integer
        Dim fntInfo = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "NotoSans-Bold.ttf"))
        Dim fntText = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "NotoSansJP-Regular.ttf"))

        Dim doc = New GcPdfDocument()
        Dim page = doc.NewPage()
        Dim g = page.Graphics

        Dim tl = g.CreateTextLayout()
        tl.TextAlignment = TextAlignment.Distributed
        tl.JustifiedSpaceExtension = 0F
        tl.JustifiedTextExtension = 20F

        Dim tf = New TextFormat With {.FontSize = 24F, .Font = fntText}
        Dim tfInfo = New TextFormat With {.FontSize = 11F, .Font = fntInfo}

        Dim marginx As Single = 120, marginy As Single = 36
        tl.MaxWidth = page.Size.Width - marginx * 2
        Dim text = "abcdefg!1010101010abc999999-12345本列島で使され99 555"

        Dim DrawTextLocal As Func(Of TextLayout, Single, Single) =
            Function(tlArg As TextLayout, yArg As Single) As Single
                Dim pt = New PointF(marginx, yArg + 20)
                tlArg.Append(text, tf)
                tlArg.PerformLayout(True)
                Dim rcLocal = New RectangleF(pt, New SizeF(tlArg.ContentWidth, tlArg.ContentHeight))
                g.FillRectangle(rcLocal, Color.PaleGoldenrod)
                g.DrawString($"LineBreakingRules.{tlArg.LineBreakingRules}, TextExtensionStrategy.{tlArg.TextExtensionStrategy}:",
                    tfInfo, New PointF(marginx / 2F, yArg))
                g.DrawTextLayout(tlArg, pt)
                tlArg.Clear()
                Return rcLocal.Bottom + 16
            End Function

        Dim y As Single = marginy
        y = DrawTextLocal(tl, y)
        tl.TextExtensionStrategy = TextExtensionStrategy.EastAsianExcel
        y = DrawTextLocal(tl, y)
        tl.TextExtensionStrategy = TextExtensionStrategy.Excel
        y = DrawTextLocal(tl, y)
        tl.LineBreakingRules = LineBreakingRules.Simplified
        tl.WordBoundaryRules = WordBoundaryRules.Simplified
        tl.TextExtensionStrategy = TextExtensionStrategy.Default
        y = DrawTextLocal(tl, y)
        tl.TextExtensionStrategy = TextExtensionStrategy.EastAsianExcel
        y = DrawTextLocal(tl, y)
        tl.TextExtensionStrategy = TextExtensionStrategy.Excel
        y = DrawTextLocal(tl, y)

        doc.Save(stream)
        Return doc.Pages.Count
    End Function
End Class