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

'' 此示例演示如何对包含软连字符 (0x00AD) 的文本进行连字符。
'' 将在软连字符位置插入分隔符(如果它们存在于文本中)
'' 如果 TextLayout.WrapMode 设置为 WordWrap。提供了两个属性来控制
'' 连字符:
'' - TextLayout.SoftHyphenReplacementCharCode:指定用作替换的字符
''   用于跨行断词时的软连字符。默认情况下该属性为 0x002D
''   (Unicode 连字符减号字符)。将此属性设置为 0 会破坏单词,而不会
''   显示任何可见的连字符。将其设置为 -1 可以防止软时断词
''   hyphens).- TextLayout.LinesBetweenConsecutiveHyphens: 指定最小非连字符数
''   以连字符结尾的行之间的连字符行。默认情况下,该属性为零。
Public Class Hyphenation
    Function CreatePDF(ByVal stream As Stream) As Integer
        '' 在线hypho-o工具
        '' 被用来在WordCharWrap的示例文本中插入软连字符:
        Dim str =
            "Lose noth­ing in your doc­u­ments! Grape­City Doc­u­ments for PDF " +
            "in­cludes text and para­graph format­ting, spe­cial char­ac­ters, " +
            "mul­tiple lan­guages, RTL sup­port, ver­tic­al and ro­tated text " +
            "on all sup­por­ted plat­forms."
        '' 将 HTML 软连字符替换为 Unicode 软连字符:
        str = str.Replace("­", $"{ChrW(&HAD)}")

        Dim doc = New GcPdfDocument()
        Dim page = doc.NewPage()
        Dim g = page.Graphics

        Dim tl = g.CreateTextLayout()
        tl.Append(str)
        tl.DefaultFormat.Font = StandardFonts.Times
        tl.DefaultFormat.FontSize = 12
        tl.MaxWidth = 72 * 3

        '' 默认情况下 0x002D(连字符减号)将用作连字符
        '' 在软连字符 (0x00AD) 处换行时:
        tl.PerformLayout(True)

        Dim dy = tl.Lines(0).Height + 72 / 16
        Dim rc = New RectangleF(72, 72 + dy, tl.MaxWidth.Value, 72 * 1.4F)

        g.DrawString("Default hyphenation:", tl.DefaultFormat, New PointF(rc.Left, rc.Top - dy))
        g.DrawTextLayout(tl, rc.Location)
        g.DrawRectangle(rc, Color.CornflowerBlue)

        rc.Offset(0, 72 * 2)
        '' 这将避免连字符连接两个连续行:
        tl.LinesBetweenConsecutiveHyphens = 1
        '' 更改连字符选项需要 RecalculateGlyphs():
        tl.PerformLayout(True)
        g.DrawString("LinesBetweenConsecutiveHyphens: 1", tl.DefaultFormat, New PointF(rc.Left, rc.Top - dy))
        g.DrawTextLayout(tl, rc.Location)
        g.DrawRectangle(rc, Color.CornflowerBlue)

        rc.Offset(0, 72 * 2)
        '' 重置之前的设置:
        tl.LinesBetweenConsecutiveHyphens = 0
        '' 完全防止单词连字符:
        tl.SoftHyphenReplacementCharCode = -1
        '' 更改连字符选项需要 RecalculateGlyphs():
        tl.PerformLayout(True)
        g.DrawString("SoftHyphenReplacementCharCode: -1", tl.DefaultFormat, New PointF(rc.Left, rc.Top - dy))
        g.DrawTextLayout(tl, rc.Location)
        g.DrawRectangle(rc, Color.CornflowerBlue)

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