''
'' 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
'' Creates a simple 3-column text layout.
'' For a slightly more complex but practically more useful way
'' to render text in columns, see BalancedColumns.
Public Class MultiColumnText
Function CreatePDF(ByVal stream As Stream) As Integer
Dim doc = New GcPdfDocument()
Dim g = doc.NewPage().Graphics
Dim tl = g.CreateTextLayout()
tl.DefaultFormat.Font = StandardFonts.Times
tl.DefaultFormat.FontSize = 12
tl.TextAlignment = TextAlignment.Justified
tl.FirstLineIndent = 72 / 2
tl.ParagraphSpacing = 72 / 8
'' Add some text (note that TextLayout interprets vbCr, vbLf and vbCrLf as paragraph delimiter):
tl.Append(Util.LoremIpsum(20))
'' Set up columns:
Const colCount = 3
'' 1/2" margins all around:
Const margin = 72.0F / 2
'' 1/4" gap between columns:
Const colGap = margin / 4
Dim colWidth = (doc.Pages.Last.Size.Width - margin * 2) / colCount - colGap * (colCount - 1)
tl.MaxWidth = colWidth
tl.MaxHeight = doc.Pages.Last.Size.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
'' 'rest' will accept the text that did not fit:
Dim rest As TextLayout = Nothing
Dim splitResult = tl.Split(Nothing, 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
doc.Pages.Add()
g = doc.Pages.Last.Graphics
col = 0
End If
End While
''
'' Done:
doc.Save(stream)
Return doc.Pages.Count
End Function
End Class