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

'' このサンプルは、複数のページにわたる長いテキストを描画する方法を示します。
Public Class PaginatedText
    Function CreatePDF(ByVal stream As Stream) As Integer
        Dim doc = New GcPdfDocument()
        ''
        '' TextLayout を使用してテキストを描画します。
        Dim tl = New TextLayout(72)
        '' 個々の実行において書式を指定しない場合は、フォントとフォントサイズを
        ''  TextLayout.DefaultFormat に指定する必要があります。
        tl.DefaultFormat.FontName = "Yu Gothic"
        tl.DefaultFormat.FontSize = 12
        '' 最初の行のオフセットを 1/2 インチにします。
        tl.FirstLineIndent = 72 / 2
        ''
        '' 他のすべての書式設定プロパティはデフォルト値のままです。
        '' とくに、TextLayoutのデフォルト解像度は72 dpiです。
        '' これは GcPdf と同じで、WordWrap は true です。
        '' 
        '' TextLayout の領域をページ全体に設定します。
        tl.MaxWidth = doc.PageSize.Width
        tl.MaxHeight = doc.PageSize.Height
        '' ...そして、ページマージンを管理します(外周に 1 インチ)。
        tl.MarginAll = tl.Resolution
        ''
        '' テキストを追加します(単一のページに収まらないように 20 段落)
        '' TextLayout は段落区切り文字として "\r\n" を解釈することに注意してください)。
        tl.Append(Util.getString_ja(0, 0, 20, 20))
        ''
        '' すべてのテキストが追加されたら、テキストの描画に必要なグリフを計算し、レイアウトを実行する必要があります。
        '' これは、PerformLayout を一回呼び出すことで行うことができ、最初にグリフを再計算するために true を渡します
        '' (テキストは指定された最大サイズに収まるわけではありませんが、PerformLayout を一度呼び出す必要があります)。
        tl.PerformLayout(True)
        '' 分割オプションを使用して、widow/orphan の制御を提供します。
        Dim tso = New TextSplitOptions(tl)
        tso.MinLinesInFirstParagraph = 2
        tso.MinLinesInLastParagraph = 2
        '' ループ内で、テキストを分割して描画します。
        While (True)
            '' 'rest' は、収まりきらなかったテキストを受け入れます。
            Dim rest As TextLayout = Nothing
            Dim splitResult = tl.Split(tso, rest)
            doc.Pages.Add().Graphics.DrawTextLayout(tl, PointF.Empty)
            If splitResult <> SplitResult.Split Then
                Exit While
            End If
            tl = rest
        End While
        ''
        '' PDF ドキュメントを保存します。
        doc.Save(stream)
        Return doc.Pages.Count
    End Function
End Class