MultiColumnText.vb
C# VB
'''' This code is part of Document Solutions for PDF .NET demos.'' Copyright (c) MESCIUS inc. All rights reserved.''Imports System.IOImports System.DrawingImports GrapeCity.Documents.PdfImports 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 FunctionEnd Class