LargeDocument3.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 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
-