PaginatedText.vb
'' 
'' このコードは、DioDocs for PDF のサンプルの一部として提供されています。
'' Copyright (c) GrapeCity 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