''
'' 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 render a long text spanning multiple pages.
Public Class PaginatedText
Function CreatePDF(ByVal stream As Stream) As Integer
Dim doc = New GcPdfDocument()
''
'' Use TextLayout to render text:
Dim tl = New TextLayout(72)
'' If not specifying formats for individual runs, we MUST provide
'' font and font size on TextLayout.DefaultFormat:
tl.DefaultFormat.Font = StandardFonts.Times
tl.DefaultFormat.FontSize = 12
'' First line offset 1/2":
tl.FirstLineIndent = 72 / 2
''
'' All other formatting properties are left at their default values.
'' In particular, TextLayout's default resolution is 72 dpi -
'' the same as DsPdf's, and WordWrap is true.
''
'' Set TextLayout's area to the whole page:
tl.MaxWidth = doc.PageSize.Width
tl.MaxHeight = doc.PageSize.Height
'' ...and have it manage the page margins (1" all around):
tl.MarginAll = tl.Resolution
''
'' Append the text (20 paragraphs so they would not fit on a single page)
'' (note that TextLayout interprets vbCrLf as paragraph delimiter):
tl.Append(Util.LoremIpsum(20))
''
'' When all text has been added, we must calculate the glyphs needed to render the text,
'' and perform the layout. This can be done by a single call to PerformLayout, passing true to
'' recalculate glyphs first (even though the text won't all fit in the specified max size,
'' we only need to call PerformLayout once):
tl.PerformLayout(True)
'' Use split options to provide widow/orphan control:
Dim tso = New TextSplitOptions(tl)
tso.MinLinesInFirstParagraph = 2
tso.MinLinesInLastParagraph = 2
'' 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