ListFonts.vb
C# VB
'''' This code is part of Document Solutions for PDF .NET demos.'' Copyright (c) MESCIUS inc. All rights reserved.''Imports System.IOImports System.DrawingImports System.Collections.GenericImports System.LinqImports GrapeCity.Documents.PdfImports GrapeCity.Documents.Text
'' This sample lists all fonts found in a loaded PDF,'' prints some info for each font, And indicates whether a Font object'' can be created from the font in the PDF.Public Class ListFonts Function CreatePDF(ByVal stream As Stream) As Integer Dim sourcePDF = "CompleteJavaScriptBook.pdf"
Dim doc = New GcPdfDocument() Dim page = doc.NewPage()
Dim rc = Util.AddNote( "This sample loads an arbitrary PDF into a temporary GcPdfDocument, " + "and lists all fonts found in that document, with some of their properties. " + "It also tries to create a Font object from each of those PDF fonts, " + "and reports whether this operation succeeded.", page)
'' Text layout to render the text: Dim tab = 24 Dim tl = page.Graphics.CreateTextLayout() tl.DefaultFormat.Font = StandardFonts.Times tl.DefaultFormat.FontSize = 12 tl.MaxWidth = doc.PageSize.Width tl.MaxHeight = doc.PageSize.Height tl.MarginAll = rc.Left tl.MarginTop = rc.Bottom + 36 tl.TabStops = New List(Of TabStop)() From {New TabStop(tab)} tl.FirstLineIndent = -tab tl.MarginRight = 144
'' Text split options for widow/orphan control: Dim tso = New TextSplitOptions(tl) With { .KeepParagraphLinesTogether = True, .MinLinesInFirstParagraph = 2, .MinLinesInLastParagraph = 2, .RestMarginTop = rc.Left }
'' Open an arbitrary PDF, load it into a temp document and get all fonts: Using fs = New FileStream(Path.Combine("Resources", "PDFs", sourcePDF), FileMode.Open, FileAccess.Read) Dim doc1 = New GcPdfDocument() doc1.Load(fs) Dim fonts = doc1.GetFonts() tl.AppendLine($"Total of {fonts.Count} fonts found in {sourcePDF}:") tl.AppendLine() Dim i As Integer = 0 For Each fnt In fonts Dim nativeFont = fnt.CreateNativeFont() tl.Append($"{i}:{vbTab}BaseFont: {fnt.BaseFont}; IsEmbedded: {fnt.IsEmbedded}.") tl.AppendParagraphBreak() If nativeFont IsNot Nothing Then tl.AppendLine($"{vbTab}CreateNativeFont succeeded, family: {nativeFont.FontFamilyName}; bold: {nativeFont.FontBold}; italic: {nativeFont.FontItalic}.") Else tl.AppendLine($"{vbTab}CreateNativeFont failed") End If tl.AppendLine() i += 1 Next tl.PerformLayout(True) 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.NewPage() End While End Using '' Done: doc.Save(stream) Return doc.Pages.Count End FunctionEnd Class