TextTrimming.vb
'' 完毕:
Imports System.IO
Imports System.Drawing
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Text
Imports GrapeCity.Documents.Drawing

'' 该示例演示了如何显示省略号
'' 如果字符串不适合分配的空间。
Public Class TextTrimming
    Function CreatePDF(ByVal stream As Stream) As Integer
        Dim doc = New GcPdfDocument()
        Dim page = doc.NewPage()
        Dim g = page.Graphics
        Const Inch = 72

        Dim str = "This is a long line of text which does not fit in the allocated space."
        Dim wid = Inch * 4
        Dim dy = 0.3F

        Dim rc = Util.AddNote(
            "TextLayout 允许您显示省略号(或其他字符)" +
            "",
            page)
        Dim top = rc.Bottom + 36

        Dim ip = New PointF(rc.Left, top)

        Dim tl = g.CreateTextLayout()
        tl.DefaultFormat.Font = StandardFonts.Times
        tl.DefaultFormat.FontSize = 12
        tl.MaxWidth = wid
        tl.WrapMode = WrapMode.NoWrap

        '' TrimmingGranularity 默认为 None:
        tl.Append(str)
        tl.PerformLayout(True)
        g.DrawTextLayout(tl, ip)
        ip.Y += tl.ContentHeight + dy

        '' 文字修剪:
        tl.TrimmingGranularity = TrimmingGranularity.Character
        '' 注意 PerformLayout 的 recalculateGlyphsBeforeLayout 参数
        '' 第一次调用后可能为 false,因为文本/字体没有改变:
        tl.PerformLayout(False)
        g.DrawTextLayout(tl, ip)
        ip.Y += tl.ContentHeight + dy

        '' 词汇修剪:
        tl.TrimmingGranularity = TrimmingGranularity.Word
        tl.PerformLayout(False)
        g.DrawTextLayout(tl, ip)
        ip.Y += tl.ContentHeight + dy

        '' tl.EllipsisCharCode 默认为 Horizo​​ntalEllipsis (0x2026)。
        '' 将其更改为波形符:
        tl.EllipsisCharCode = &H7E
        tl.PerformLayout(False)
        g.DrawTextLayout(tl, ip)
        ip.Y += tl.ContentHeight + dy

        '' 我们还可以将 tl.EllipsisCharCode 设置为 0 来修剪文本
        '' 不渲染任何修剪字符:
        tl.EllipsisCharCode = 0
        tl.PerformLayout(False)
        g.DrawTextLayout(tl, ip)
        ip.Y += tl.ContentHeight + dy

        '' 另一个有趣的功能是由这对提供的
        '' DelimiterCharCode 和 DelimiterCharCount 属性。
        '' 这些通常用于缩短长路径
        '' 在字符串尾部保留指定数量的部分:
        tl.Clear()
        tl.EllipsisCharCode = &H2026
        tl.Append("c:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe")
        tl.DelimiterCharCode = Asc("\"c)
        tl.DelimiterCharCount = 2
        tl.PerformLayout(True)
        g.DrawTextLayout(tl, ip)
        ip.Y += tl.ContentHeight + dy

        g.DrawRectangle(New RectangleF(rc.Left, top, wid, ip.Y - top), Color.OrangeRed)

        '' 完毕:
        doc.Save(stream)
        Return doc.Pages.Count
    End Function
End Class