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

'' 演示 GcDocs.Pdf 中字符格式化的基础知识。
'' 
'' GcDocs.Pdf 中的字符格式是通过 GrapeCity.Documents.Text.TextFormat 类完成的。
'' 具有所需格式选项的该类的实例
'' 被传递给 GcDocs.Pdf 中可用的大多数文本渲染方法(例如 DrawString)。
'' 在同一段落中呈现具有不同字符格式的文本
'' 是通过使用 TextLayout/DrawTextLayout 来完成的。
'' 另请参阅TextRenderingMultiFormattedTextParagraphAlign、
'' ParagraphFormattingTextAlign。
Public Class CharacterFormatting
    Function CreatePDF(ByVal stream As Stream) As Integer
        Dim doc = New GcPdfDocument()
        Dim page = doc.NewPage()
        Dim g = page.Graphics
        Const Inch = 72.0F, vStep = Inch / 2
        Dim ip = New PointF(Inch, Inch)

        '' 1. 必须在 TextFormat 上设置的唯一强制属性是 Font:
        Dim tf = New TextFormat() With {.Font = StandardFonts.Times}

        g.DrawString("1. 必须始终在 TextFormat 上设置的唯一强制属性是 Font。" +
            "", tf, ip)
        ip.Y += vStep * 2

        '' 2. 提供标准字体属性:
        tf.Underline = True
        tf.Strikethrough = True
        tf.FontSize = 10
        g.DrawString("2.标准属性可用,这里我们打开下划线和删除线,并将FontSize设置为10。", tf, ip)
        ip.Y += vStep

        '' 3. TextFormat.FontStyle 允许您模拟粗体和/或斜体样式
        '' 使用常规字体(另请参阅BoldItalicEmulation):
        tf.Underline = tf.Strikethrough = False
        tf.FontStyle = GCTEXT.FontStyle.BoldItalic
        tf.FontSize = 12
        g.DrawString("3. 使用TextFormat.FontStyle.BoldItalic 模拟粗体斜体样式。", tf, ip)
        ip.Y += vStep

        '' 4.其他属性包括前景色和背景色:
        tf.FontStyle = GCTEXT.FontStyle.Regular
        tf.ForeColor = Color.DarkSlateBlue
        tf.BackColor = Color.PaleGreen
        g.DrawString("4. 使用TextFormat.ForeColor 和TextFormat.BackColor 为文本着色。", tf, ip)
        ip.Y += vStep

        '' 5. 同一段落中可以混合使用不同的文本格式。
        '' 为此,必须使用 TextLayout 和 GcPdfGraphics.DrawTextLayout:
        Dim tl = g.CreateTextLayout()
        tl.Append("5. 不同的文本格式可以很容易地混合在同一个段落中",
            New TextFormat() With {.Font = StandardFonts.Times})
        tl.Append("当使用 TextLayout 构建段落时",
            New TextFormat() With {.Font = StandardFonts.TimesBold, .BackColor = Color.PaleTurquoise})
        tl.Append("如本示例段落所示。",
            New TextFormat() With {.Font = StandardFonts.HelveticaBoldItalic, .ForeColor = Color.DarkOrange})
        tl.Append("TextFormat 上还有各种其他选项,包括",
            New TextFormat() With {.Font = StandardFonts.Times, .ForeColor = Color.DarkSlateBlue})
        tl.Append("字形提前系数",
            New TextFormat() With {.Font = StandardFonts.TimesBoldItalic, .Underline = True})
        tl.Append("(扩展字形",
            New TextFormat() With {.Font = StandardFonts.Times, .GlyphAdvanceFactor = 1.5F, .ForeColor = Color.BlueViolet})
        tl.Append("或者将它们放在一起),",
            New TextFormat() With {.Font = StandardFonts.Times, .GlyphAdvanceFactor = 0.8F, .ForeColor = Color.BlueViolet})
        tl.Append("横向偏移",
            New TextFormat() With {.Font = StandardFonts.TimesBoldItalic, .Underline = True})
        tl.Append("(将字形降低到基线以下,",
            New TextFormat() With {.Font = StandardFonts.Times, .TransverseOffset = -5, .ForeColor = Color.MediumVioletRed})
        tl.Append("或将它们提高到其上方)",
            New TextFormat() With {.Font = StandardFonts.Times, .TransverseOffset = 5, .ForeColor = Color.MediumVioletRed})
        tl.Append("等等(例如,可以通过 TextFormat.FontFeatures 访问特定字体的功能)。",
            New TextFormat() With {.Font = StandardFonts.Times, .FontFeatures = New FontFeature() {New FontFeature(FeatureTag.clig)}})

        '' 对于此示例,我们仅设置文本布局的最大宽度,
        '' 在真实的应用程序中,您可能至少也会设置 MaxHeight:
        tl.MaxWidth = page.Size.Width - Inch * 2
        tl.PerformLayout(True)
        g.DrawTextLayout(tl, ip)
        ''
        '' 完毕:
        doc.Save(stream)
        Return doc.Pages.Count
    End Function
End Class