'' This code is part of Document Solutions for PDF demos.
'' Copyright (c) MESCIUS inc. All rights reserved.
Imports System.IO
Imports System.Drawing
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Text
Imports GrapeCity.Documents.Drawing

'' This sample shows how to prevent a page break between a paragraph
'' and the next one when splitting a TextLayout.
'' Splitting of text in this sample is similar to that in PaginatedText,
'' see comments in PaginatedText for more info on text handling.
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
        '' Text format for paragraphs kept together with next one:
        Dim tf = New TextFormat(tl.DefaultFormat) With
                .FontSize = tl.DefaultFormat.FontSize + 2,
                .FontBold = True
        '' We add a number of random 'lorem ipsum' paragraphs to this document,
        '' adding a 'caption' before each paragraph which is kept together
        '' with the following 'lorem ipsum' paragraph:
        For i = 0 To NPAR - 1
            '' 'Caption' kept together with the next paragraph:
            tl.Append("Caption kept together with the next paragraph. No page break after this.", tf)
            '' AppendParagraphBreak adds a paragraph break but prevents a page break between the two paragraphs:
            '' Random paragraph after 'caption':
        '' We force all paragraph lines to stay on the same page,
        '' this makes it more obvious that 'caption' and following paragraph
        '' are kept on the same page:
        Dim tso = New TextSplitOptions(tl) With
                .KeepParagraphLinesTogether = True
        '' In a loop, split and render the text:
        While (True)
            '' 'rest' will accept the text that did not fit:
            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
        '' Done:
        Return doc.Pages.Count
    End Function
End Class