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