FontFromFile.vb
'' 完毕:
Imports System.IO
Imports System.Drawing
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Text
Imports GCTEXT = GrapeCity.Documents.Text
Imports GCDRAW = GrapeCity.Documents.Drawing

'' 这个简短的示例演示了如何从文件加载字体
'' 并在您的代码中用于呈现文本。
'' 该示例依赖于存在于
'' 资源/字体文件夹。
'' 
'' 注1:当使用Font.FromFile()时,实际数据是按需加载的,
'' 因此通常 Font 实例不会占用太多空间。
'' 对于使用 Font.FromArray() 创建的字体,情况有所不同
'' nd Font.FromStream() 方法 - 在这些情况下,整个字体是
'' 立即加载到内存中。字体仍将被解析
'' 只能按需使用,但内存消耗稍高,
'' 因此,通常应该首选使用 Font.FromFile() 。
'' 
'' 注 2:当不同的 Font 实例(使用任何静态因子创建)
'' 上面提到的)用于渲染 PDF 中的文本,每个实例都会产生
'' 即使字形相同,也嵌入单独的字形子集,
'' 因为 GcDocs.Pdf 无法知道两个不同的 Font 实例
'' 代表相同的物理字体。因此,要么确保只有一个 Font 实例
'' 为每种物理字体创建,或者更好的是使用 FontCollection 类
'' 添加您需要的字体,并通过 TextFormat.FontName 指定它们。
Public Class FontFromFile
    Function CreatePDF(ByVal stream As Stream) As Integer
        Dim gabriola = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "Gabriola.ttf"))
        If gabriola Is Nothing Then
            Throw New Exception("Could not load font Gabriola")
        End If

        '' 现在我们有了字体,用它来渲染一些文本:
        Dim tf = New TextFormat() With {.Font = gabriola, .FontSize = 16}
        Dim doc = New GcPdfDocument()
        Dim g = doc.NewPage().Graphics
        g.DrawString($"Sample text drawn with font {gabriola.FontFamilyName}.", tf, New PointF(72, 72))
        '' 我们可以改变字体大小:
        tf.FontSize += 4
        g.DrawString("The quick brown fox jumps over the lazy dog.", tf, New PointF(72, 72 * 2))
        '' 我们可以强制 GcDocs.Pdf 使用非粗体(非斜体)字体模拟粗体或斜体样式,例如:
        tf.FontStyle = GCTEXT.FontStyle.Bold
        g.DrawString("This line prints with the same font, using emulated bold style.", tf, New PointF(72, 72 * 3))
        '' 但当然,使用真正的粗体/斜体字体比模拟字体要好得多。
        '' 最后,获得一个真正的粗体斜体字体并用它打印一行:
        Dim timesbi = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "timesbi.ttf"))
        If timesbi Is Nothing Then
            Throw New Exception("Could not load font timesbi")
        End If
        tf.Font = timesbi
        tf.FontStyle = GCTEXT.FontStyle.Regular
        g.DrawString($"This line prints with {timesbi.FullFontName}.", tf, New PointF(72, 72 * 4))
        ''
        '' 完毕:
        doc.Save(stream)
        Return doc.Pages.Count
    End Function
End Class