TextJustifyRules.vb
C# VB
'''' This code is part of Document Solutions for Imaging demos.'' Copyright (c) MESCIUS inc. All rights reserved.''Imports System.DrawingImports System.IOImports GrapeCity.Documents.TextImports GrapeCity.Documents.DrawingImports GCTEXT = GrapeCity.Documents.TextImports GrapeCity.Documents.Imaging
'' This sample demonstrates how LineBreakingRules and TextExtensionStrategy affect automatic'' line wrapping and distributed justification.'' LineBreakingRules.Unicode and .Simplified may break inside a run of non-whitespace'' characters (e.g. between a Latin/digit run and an adjacent CJK run) to pack a line tighter;'' LineBreakingRules.WhiteSpace only wraps at whitespace, keeping such runs (hyphenated'' identifiers, codes, product names, file names, URLs) intact on one line instead.Public Class TextJustifyRules Public Function GenerateImage( ByVal pixelSize As Size, ByVal dpi As Single, ByVal opaque As Boolean, Optional ByVal sampleParams As String() = Nothing) As GcBitmap
Dim regular = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "NotoSansJP-Regular.ttf")) Dim bold = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "NotoSerif-Bold.ttf"))
Dim bmp = New GcBitmap(pixelSize.Width, pixelSize.Height, opaque, dpi, dpi)
Using g = bmp.CreateGraphics(Color.White)
Dim tl = g.CreateTextLayout() tl.TextAlignment = TextAlignment.Distributed tl.JustifiedSpaceExtension = 0F tl.JustifiedTextExtension = 20F
Dim tf = New TextFormat() With {.FontSize = 14F, .Font = regular} Dim tfInfo = New TextFormat() With {.FontSize = 9F, .Font = bold}
Dim marginx As Single = 372, marginy As Single = 28 tl.MaxWidth = pixelSize.Width - marginx * 2 Dim text = "1234567890-890-9876-54321-123986321 10abc9876 56A-345本列島で使われ456"
Dim y As Single = marginy y = DrawText(g, tl, y, marginx, tf, tfInfo, text) tl.TextExtensionStrategy = TextExtensionStrategy.EastAsianExcel y = DrawText(g, tl, y, marginx, tf, tfInfo, text) tl.TextExtensionStrategy = TextExtensionStrategy.Excel y = DrawText(g, tl, y, marginx, tf, tfInfo, text) tl.LineBreakingRules = LineBreakingRules.Simplified tl.WordBoundaryRules = WordBoundaryRules.Simplified tl.TextExtensionStrategy = TextExtensionStrategy.Default y = DrawText(g, tl, y, marginx, tf, tfInfo, text) tl.TextExtensionStrategy = TextExtensionStrategy.EastAsianExcel y = DrawText(g, tl, y, marginx, tf, tfInfo, text) tl.TextExtensionStrategy = TextExtensionStrategy.Excel y = DrawText(g, tl, y, marginx, tf, tfInfo, text) tl.LineBreakingRules = LineBreakingRules.WhiteSpace tl.WordBoundaryRules = WordBoundaryRules.Unicode '' WordBoundaryRules has no WhiteSpace value - it only affects word-boundary lookups, not wrapping tl.TextExtensionStrategy = TextExtensionStrategy.Default y = DrawText(g, tl, y, marginx, tf, tfInfo, text) tl.TextExtensionStrategy = TextExtensionStrategy.EastAsianExcel y = DrawText(g, tl, y, marginx, tf, tfInfo, text) tl.TextExtensionStrategy = TextExtensionStrategy.Excel y = DrawText(g, tl, y, marginx, tf, tfInfo, text) End Using Return bmp End Function
Private Shared Function DrawText(g As GcGraphics, tl As TextLayout, y As Single, marginx As Single, tf As TextFormat, tfInfo As TextFormat, text As String) As Single
Dim pt = New PointF(marginx, y + 12) tl.Append(text, tf) tl.PerformLayout(True) Dim rc = New RectangleF(pt, New SizeF(tl.ContentWidth, tl.ContentHeight)) g.FillRectangle(rc, Color.PaleGoldenrod) g.DrawString($"LineBreakingRules.{tl.LineBreakingRules}, TextExtensionStrategy.{tl.TextExtensionStrategy}:", tfInfo, New PointF(marginx / 2.0F, y)) g.DrawTextLayout(tl, pt) tl.Clear() Return rc.Bottom + 8 End FunctionEnd Class