CharacterFormatting.vb
'' 
'' このコードは、DioDocs for PDF のサンプルの一部として提供されています。
'' © MESCIUS inc. All rights reserved.
'' 
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

'' DsPdf における文字書式設定の基本を紹介します。
'' 
'' DsPdf の文字書式設定は、GrapeCity.Documents.Text.TextFormat クラスを介して行われます。
'' 必要な書式設定オプションを持つそのクラスのインスタンスは、DsPdfで使用できるほとんどの
'' テキストレンダリングメソッド(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)
        Const fontname = "Yu Gothic"

        '' 1. TextFormat に設定する必要がある唯一の必須プロパティは Font です。
        Dim tf = New TextFormat() With {.FontName = fontname}

        g.DrawString("1. 常に TextFormat に設定する必要がある唯一の必須プロパティは Font です。" + vbLf +
            "FontSize であってもオプションで、デフォルトは12ポイントです。", 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 = False
        tf.Strikethrough = False
        tf.FontStyle = GCTEXT.FontStyle.BoldItalic
        tf.FontSize = 12
        g.DrawString("3. 太字、斜体のフォントスタイルを設定するには TextFormat を使用します。", 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. この段落が示すように、段落が TextLayout で構築されている場合、",
            New TextFormat() With {.FontName = fontname})
        tl.Append("異なる段落の書式を同じ段落に",
            New TextFormat() With {.FontName = fontname, .FontBold = True, .BackColor = Color.PaleTurquoise})
        tl.Append("簡単に混在させることができます。",
            New TextFormat() With {.Font = StandardFonts.HelveticaBoldItalic, .ForeColor = Color.DarkOrange})
        tl.Append("以下のような、さまざまなオプションが TextFormat で利用できます。",
            New TextFormat() With {.FontName = fontname, .ForeColor = Color.DarkSlateBlue})
        tl.AppendLine()
        tl.Append("GlyphAdvanceFactor は",
            New TextFormat() With {.FontName = fontname, .FontStyle = GCTEXT.FontStyle.BoldItalic, .Underline = True})
        tl.Append("グリフを広げたり、",
            New TextFormat() With {.FontName = fontname, .GlyphAdvanceFactor = 1.5F, .ForeColor = Color.BlueViolet})
        tl.Append("狭めたりすることができます。",
            New TextFormat() With {.FontName = fontname, .GlyphAdvanceFactor = 0.8F, .ForeColor = Color.BlueViolet})
        tl.AppendLine()
        tl.Append("TransverseOffset を設定して",
            New TextFormat() With {.FontName = fontname, .FontStyle = GCTEXT.FontStyle.BoldItalic, .Underline = True})
        tl.Append("ベースラインの下にあるグリフを下げる、",
            New TextFormat() With {.FontName = fontname, .TransverseOffset = -5, .ForeColor = Color.MediumVioletRed})
        tl.Append("または上に上げることができます。",
            New TextFormat() With {.FontName = fontname, .TransverseOffset = 5, .ForeColor = Color.MediumVioletRed})
        tl.AppendLine()
        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)
        ''
        '' PDF ドキュメントを保存します。
        doc.Save(stream)
        Return doc.Pages.Count
    End Function
End Class