Outlines.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
-
- '' Shows how to add ouline entries to a document.
- '' See also PaginatedText.
- Public Class Outlines
- Function CreatePDF(ByVal stream As Stream) As Integer
- Dim doc = New GcPdfDocument()
- '' Text layout for main text (default DsPdf resolution is 72dpi):
- Dim tl = New TextLayout(72)
- tl.DefaultFormat.Font = StandardFonts.Times
- tl.DefaultFormat.FontSize = 12
- tl.FirstLineIndent = 72 / 2
- tl.MaxWidth = doc.PageSize.Width
- tl.MaxHeight = doc.PageSize.Height
- tl.MarginAll = tl.Resolution
- '' Text layout for chapter headers:
- Dim tlCaption = New TextLayout(72)
- tlCaption.DefaultFormat.Font = StandardFonts.TimesBold
- tlCaption.DefaultFormat.FontSize = tl.DefaultFormat.FontSize + 4
- tlCaption.DefaultFormat.Underline = True
- tlCaption.MaxWidth = tl.MaxWidth
- tlCaption.MarginLeft = tlCaption.Resolution
- tlCaption.MarginTop = tlCaption.Resolution
- tlCaption.MarginRight = tlCaption.Resolution
- tlCaption.MarginBottom = tlCaption.Resolution
- '' Split options to control splitting of text between pages:
- Dim tso = New TextSplitOptions(tl) With {
- .RestMarginTop = tl.Resolution,
- .MinLinesInFirstParagraph = 2,
- .MinLinesInLastParagraph = 2
- }
- '' Generate a number of "chapters", provide outline entry for each:
- Const NChapters = 20
- For i = 0 To NChapters - 1
-
- doc.Pages.Add()
- '' Chapter title - print as chapter header and add as outline node:
- Dim chapter = $"Chapter {i + 1}"
- tlCaption.Clear()
- tlCaption.Append(chapter)
- tlCaption.PerformLayout(True)
- '' Add outline node for the chapter:
- doc.Outlines.Add(New OutlineNode(chapter, New DestinationFitH(doc.Pages.Last, tlCaption.MarginTop)))
- '' Print the caption:
- doc.Pages.Last.Graphics.DrawTextLayout(tlCaption, PointF.Empty)
- '' Chapter text:
- tl.Clear()
- tl.FirstLineIsStartOfParagraph = True
- tl.LastLineIsEndOfParagraph = True
- tl.Append(Util.LoremIpsum(7))
- '' Account for chapter header in the main text layout:
- tl.MarginTop = tlCaption.ContentRectangle.Bottom + 12
- tl.PerformLayout(True)
- '' Print the chapter:
- While True
- '' 'rest' will accept the text that did not fit:
- Dim rest As TextLayout = Nothing
- Dim splitResult = tl.Split(tso, rest)
- doc.Pages.Last.Graphics.DrawTextLayout(tl, PointF.Empty)
- If splitResult <> SplitResult.Split Then
- Exit While
- End If
- tl = rest
- doc.Pages.Add()
- End While
- Next
- ''
- '' Done:
- doc.Save(stream)
- Return doc.Pages.Count
- End Function
- End Class
-