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

'' 単一の 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 = GCTEXT.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