''
'' 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 GCTEXT = GrapeCity.Documents.Text
Imports GCDRAW = GrapeCity.Documents.Drawing
'' Generates a large PDF using a single TextLayout.
'' Unlike other 'large document' samples (StartEndDoc, LargeDocument2),
'' this sample actually paginates the whole document as a single sequence of paragraphs,
'' optimally and correctly filling each page with text. Split options such as
'' keeping at least 2 lines of paragraph on each page are also supported.
'' Due to the extra work, this sample takes significantly more time to complete.
Public Class LargeDocument3
Function CreatePDF(ByVal stream As Stream) As Integer
'' Number of pages to generate:
Const N = Util.LargeDocumentIterations
Dim start = Util.TimeNow()
Dim doc = New GcPdfDocument()
'' Prep a TextLayout to hold/format the text:
Dim tl = New TextLayout(72) With {
.MaxWidth = doc.PageSize.Width,
.MaxHeight = doc.PageSize.Height,
.MarginAll = 72,
.FirstLineIndent = 36
}
tl.DefaultFormat.Font = StandardFonts.Times
tl.DefaultFormat.FontSize = 12
'' Generate the document:
For paraIdx = 1 To N
tl.AppendLine(Util.LoremIpsum(1))
Next
'' Split and render TextLayout as shown in the PaginatedText sample:
Dim tso = New TextSplitOptions(tl) With {
.MinLinesInFirstParagraph = 2,
.MinLinesInLastParagraph = 2
}
tl.PerformLayout(True)
'' The loop splitting and rendering the layout:
Dim tls = New TextLayoutSplitter(tl)
Dim tlPage = tls.Split(tso)
While Not tlPage Is Nothing
doc.NewPage().Graphics.DrawTextLayout(tlPage, PointF.Empty)
tlPage = tls.Split(tso)
End While
tl.Clear()
'' Insert a title page (cannot be done if using StartDoc/EndDoc):
tl.FirstLineIndent = 0
Dim fnt = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "yumin.ttf"))
Dim tf0 = New TextFormat() With {.FontSize = 24, .FontBold = True, .Font = fnt}
tl.Append(String.Format("Large Document" + vbLf + "{0} Paragraphs of Lorem Ipsum" + vbLf + vbLf, N), tf0)
Dim tf1 = New TextFormat(tf0) With {.FontSize = 14, .FontItalic = True}
tl.Append(String.Format("Generated on {0} in {1:m\m\ s\s\ fff\m\s}.", Util.TimeNow().ToString("R"), Util.TimeNow() - start), tf1)
tl.TextAlignment = TextAlignment.Center
tl.PerformLayout(True)
doc.Pages.Insert(0).Graphics.DrawTextLayout(tl, PointF.Empty)
'' Done:
doc.Save(stream)
Return doc.Pages.Count
End Function
End Class