LargeDocument3.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

'' 単一の TextLayoutを 使用して大規模な PDF を生成します。
'' 他の大規模なドキュメントのサンプル(StartEndDocLargeDocument2)とは異なり、
'' このサンプルは実際には段落の単一のシーケンスとしてドキュメント全体をページ化します。 
'' 各ページに少なくとも2行の段落を保持するなどの分割オプションもサポートされています。
'' 余分な作業があるので、このサンプルは完了するまでにかなりの時間がかかります。
Public Class LargeDocument3
    Function CreatePDF(ByVal stream As Stream) As Integer
        '' 生成するページ数を設定します。
        Const N = Util.LargeDocumentIterations
        Dim start = DateTime.Now
        Dim doc = New GcPdfDocument()
        '' テキストを保持/書式設定するための TextLayout を準備します。
        Dim tl = New TextLayout(72) With {
            .MaxWidth = doc.PageSize.Width,
            .MaxHeight = doc.PageSize.Height,
            .MarginAll = 72,
            .FirstLineIndent = 36
        }
        tl.DefaultFormat.FontName = "Yu Gothic"
        tl.DefaultFormat.FontSize = 12
        '' ドキュメントを生成します。
        For paraIdx = 1 To N
            tl.AppendLine(Util.getString_ja(1, 0, 1))
        Next
        '' TextLayout の分割および描画については、PaginatedText サンプルを参照してください。
        Dim tso = New TextSplitOptions(tl) With {
            .MinLinesInFirstParagraph = 2,
            .MinLinesInLastParagraph = 2
        }
        tl.PerformLayout(True)
        '' レイアウトを分割して描画するループ処理。
        Dim tls = New TextLayoutSplitter(tl)

        Dim tlPage = tls.Split(tso)
        While Not tlPage Is Nothing
            doc.NewPage().Graphics.DrawTextLayout(tlPage, PointF.Empty)
            tlPage = tls.Split(tso)
        End While

        tl.Clear()
        '' タイトルページを挿入します(StartDoc/EndDoc を使用している場合はできません)。
        tl.FirstLineIndent = 0
        Dim fnt = Font.FromFile(Path.Combine("Resources", "Fonts", "yumin.ttf"))
        Dim tf0 = New TextFormat() With {.FontSize = 24, .FontBold = True, .Font = fnt}
        tl.Append(String.Format("大規模なドキュメント" + vbLf + "{0} ページのテキストデータ" + vbLf + vbLf, N), tf0)
        Dim tf1 = New TextFormat(tf0) With {.FontSize = 14, .FontItalic = True}
        tl.Append(String.Format("生成日時 {0}、作成時間 {1:m\m\ s\s\ fff\m\s}", DateTime.Now, DateTime.Now - start), tf1)
        tl.TextAlignment = TextAlignment.Center
        tl.PerformLayout(True)
        doc.Pages.Insert(0).Graphics.DrawTextLayout(tl, PointF.Empty)
        '' PDF ドキュメントを保存します。
        doc.Save(stream)
        Return doc.Pages.Count
    End Function
End Class