KeepWithNext.vb
'' 完毕:
Imports System.IO
Imports System.Drawing
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Text
Imports GrapeCity.Documents.Drawing

'' 此示例演示如何防止段落之间出现分页符
'' 以及拆分 TextLayout 时的下一个。
'' 此示例中文本的 @Splitting 与 @{PaginatedText} 中的类似,
'' see comments in PaginatedText 以获取有关文本处理的更多信息。
Public Class KeepWithNext
    Function CreatePDF(ByVal stream As Stream) As Integer
        Const NPAR = 40
        Dim doc = New GcPdfDocument()
        Dim tl = New TextLayout(72) With
            {
                .FirstLineIndent = 72 / 2,
                .MaxWidth = doc.PageSize.Width,
                .MaxHeight = doc.PageSize.Height,
                .MarginAll = 72
            }
        tl.DefaultFormat.Font = StandardFonts.Times
        tl.DefaultFormat.FontSize = 12
        '' 与下一个段落放在一起的文本格式:
        Dim tf = New TextFormat(tl.DefaultFormat) With
            {
                .FontSize = tl.DefaultFormat.FontSize + 2,
                .FontBold = True
            }
        '' 我们在本文档中添加了一些随机的“lorem ipsum”段落,
        '' 在每个段落之前添加一个“标题”,并将其放在一起
        '' 带有以下“lorem ipsum”段落:
        For i = 0 To NPAR - 1
            '' “标题”与下一段保持在一起:
            tl.Append("标题与下一段保持在一起。", tf)
            '' AppendParagraphBreak 添加段落分隔符,但防止两个段落之间出现分页符:
            tl.AppendParagraphBreak()
            '' “标题”后的随机段落:
            tl.Append(Util.LoremIpsum(1))
        Next
        tl.PerformLayout(True)
        '' 我们强制所有段落行保持在同一页上,
        '' 这使得“标题”和以下段落更加明显
        '' 保存在同一页面上:
        Dim tso = New TextSplitOptions(tl) With
            {
                .KeepParagraphLinesTogether = True
            }
        '' 在循环中,分割并渲染文本:
        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
        '' 完毕:
        doc.Save(stream)
        Return doc.Pages.Count
    End Function
End Class