KeepWithNext.vb
- ''
- '' 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
-