''
'' 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:
tl.AppendParagraphBreak()
'' Random paragraph after 'caption':
tl.Append(Util.LoremIpsum(1))
Next
tl.PerformLayout(True)
'' 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:
doc.Save(stream)
Return doc.Pages.Count
End Function
End Class