MultiColumnText.vb
'' 
'' このコードは、DioDocs for PDF のサンプルの一部として提供されています。
'' © MESCIUS inc. All rights reserved.
'' 
Imports System.IO
Imports System.Drawing
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Text

'' シンプルな3列のテキストレイアウトを作成します。
'' 少々複雑ではあるものの列のテキストを描画する上で便利な
'' 方法については、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.FontName = "Yu Gothic"
        tl.DefaultFormat.FontSize = 10
        tl.TextAlignment = TextAlignment.Justified
        tl.FirstLineIndent = 72 / 2
        tl.ParagraphSpacing = 72 / 8
        '' テキストを追加します(TextLayout は段落区切り文字として "\r\n" を解釈します)。
        tl.Append(Util.getString_ja(1, 0, 20, 2, 30, True))
        '' 列を設定します。
        Const colCount = 3
        '' 周囲に1/2 インチの余白
        Const margin = 72.0F / 2
        '' 列の間に 1/4 インチの隙間
        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
        '' グリフを計算し、テキスト全体のレイアウトを実行します。
        tl.PerformLayout(True)
        '' ループ内で、現在の列のテキストを分割して描画します。
        Dim col = 0
        While True
            '' 'rest' は、収まりきらなかったテキストを受け入れます。
            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
        ''
        '' PDF ドキュメントを保存します。
        doc.Save(stream)
        Return doc.Pages.Count
    End Function
End Class