CharacterFormatting.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

'' GcPdf における文字書式設定の基本を紹介します。
'' 
'' GcPdf の文字書式設定は、GrapeCity.Documents.Text.TextFormat クラスを介して行われます。
'' 必要な書式設定オプションを持つそのクラスのインスタンスは、GcPdfで使用できるほとんどの
'' テキストレンダリングメソッド(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 です。" + vbCrLf +
            "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 = tf.Strikethrough = False
        tf.FontStyle = FontStyle.BoldItalic
        tf.FontSize = 12
        g.DrawString(
            "3.太字、斜体のフォントスタイルを設定するには TextFormat を使用します。",
            tf, ip)
        ip.Y += vStep

        '' 4. その他のプロパティには、前景色と背景色があります。
        tf.FontStyle = 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 = New TextLayout()
        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.Append(
            "GlyphAdvanceFactor は",
            New TextFormat() With {.FontName = fontname, .FontStyle = 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.Append(
            "TransverseOffset を設定して",
            New TextFormat() With {.FontName = fontname, .FontStyle = 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.Append(
            "さらに、特定フォントの機能を TextFormat.FontFeatures を通じて操作することも可能です。",
            New TextFormat() With {.FontName = fontname, .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