TextColumns.vb
- ''
- '' This code is part of Document Solutions for Imaging demos.
- '' Copyright (c) MESCIUS inc. All rights reserved.
- ''
- Imports System.IO
- Imports System.Drawing
- Imports System.Numerics
- Imports GrapeCity.Documents.Drawing
- Imports GrapeCity.Documents.Text
- Imports GrapeCity.Documents.Imaging
- Imports GCTEXT = GrapeCity.Documents.Text
- Imports GCDRAW = GrapeCity.Documents.Drawing
-
- '' This sample shows how to draw multi-column text on a GcBitmap.
- Public Class TextColumns
- Function GenerateImage(
- ByVal pixelSize As Size,
- ByVal dpi As Single,
- ByVal opaque As Boolean,
- Optional ByVal sampleParams As String() = Nothing) As GcBitmap
-
- Dim bmp = New GcBitmap(pixelSize.Width, pixelSize.Height, True, dpi, dpi)
- Using g = bmp.CreateGraphics(Color.White)
- g.Renderer.Multithreaded = True
- g.Renderer.SlowAntialiasing = True
-
- Dim tl = g.CreateTextLayout()
- tl.DefaultFormat.Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "times.ttf"))
-
- tl.DefaultFormat.FontSize = 12
- tl.TextAlignment = TextAlignment.Justified
- tl.FirstLineIndent = 96 / 2
- tl.ParagraphSpacing = 96 / 8
-
- '' Add some text (note that TextLayout interprets "\r\n", "\r" And "\n" as paragraph delimiters)
- tl.Append(Util.LoremIpsum(20))
- '' Set up columns
- Const colCount = 3
- Const margin = 96 / 2 '' 1/2" margins all around
- Const colGap = margin / 2 '' 1/4" gap between columns
- Dim colWidth = (bmp.Width - margin * 2 - colGap * (colCount - 1)) / colCount
- tl.MaxWidth = colWidth
- tl.MaxHeight = bmp.Height - margin * 2
- '' Calculate glyphs And perform layout for the whole text:
- tl.PerformLayout(True)
-
- '' In a loop, split And render the text in the current column:
- Dim col = 0
- While (True)
- '' The TextLayout that will hold the rest of the text which did Not fit in the current layout:
- Dim tso = New TextSplitOptions(tl) With
- {
- .MinLinesInLastParagraph = 2,
- .MinLinesInFirstParagraph = 2
- }
- Dim rest As TextLayout = Nothing
- Dim splitResult = tl.Split(tso, rest)
- g.DrawTextLayout(tl, New PointF(margin + col * (colWidth + colGap), margin))
- If splitResult <> SplitResult.Split Then
- Exit While
- End If
- tl = rest
- col += 1
- If col = colCount Then
- Exit While
- End If
- End While
- End Using
- Return bmp
- End Function
- End Class
-