TextTrimming.vb
'' 
'' このコードは、DioDocs for PDF のサンプルの一部として提供されています。
'' Copyright (c) GrapeCity inc. All rights reserved.
'' 
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 は、割り当てられたスペースに収まらないテキスト行の末尾に" +
            "省略記号(または他の文字)を表示することが可能です。" + vbLf +
            "トリミングを使用するには、TrimmingGranularity を Character または " +
            "Wordに 設定します(デフォルトは None です)。WrapMode が NoWrap で、" +
            "テキストが長すぎる場合はトリミングを開始します。レイアウトの幅が" +
            "狭すぎて1語に収まらない場合は、折り返したテキストもトリミングを" +
            "表示することがあります。" + vbLf +
            "以下は、文字や単語にトリミングされていないテキストの例です。次の行は、" +
            "異なるトリミング文字(この場合はチルダ)を示しています。最後の行は、" +
            "トリミング文字を追加せずにテキストをトリミングする方法(トリミング" +
            "粒度を考慮)を示しています。",
            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 は HorizontalEllipsis(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

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

        '' PDF ドキュメントを保存します。
        doc.Save(stream)
        Return doc.Pages.Count
    End Function
End Class