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

'' 単一の段落で異なるテキスト書式(フォント、色)を使用する方法を示します。
Public Class MultiFormattedText
    Function CreatePDF(ByVal stream As Stream) As Integer
        '' 書式設定オプションを引用するサンプルテキストを生成する関数です。
        Dim makeSampleText As Func(Of TextFormat, String) =
            Function(ByVal tf_)
                Dim boldItalic = String.Empty
                If tf_.Font.FontBold Then
                    boldItalic = "bold "
                End If
                If tf_.Font.FontItalic Then
                    boldItalic += "italic "
                End If
                If boldItalic = String.Empty Then
                    boldItalic = "normal "
                End If
                Return $"This is {boldItalic}text drawn using font '{tf_.Font.FullFontName}', font size {tf_.FontSize} points, " +
                    $"text color {tf_.ForeColor}, background color {tf_.BackColor} " +
                    $"設定(フォント:{tf_.Font.FullFontName} サイズ:{tf_.FontSize} 色:{tf_.ForeColor} 背景色:{tf_.BackColor})"
            End Function

        '' フォント名。
        Const times = "times new roman"
        Const arial = "arial"
        '' ドキュメントとテキストレイアウトを作成します。
        Dim doc = New GcPdfDocument()
        Dim page = doc.NewPage()
        Dim g = page.Graphics
        Dim tl = g.CreateTextLayout()
        '' TextLayout を使用してページ全体をレイアウトし、余白を維持します。
        tl.MaxHeight = page.Size.Height
        tl.MaxWidth = page.Size.Width
        tl.MarginAll = 72
        '' いくつかのフォントを取得します。
        Dim fc = New FontCollection()
        fc.RegisterDirectory(Path.Combine("Resources", "Fonts"))
        Dim fTimes = fc.FindFamilyName(times, False, False)
        Dim fTimesBold = fc.FindFamilyName(times, True, False)
        Dim fTimesItalic = fc.FindFamilyName(times, False, True)
        Dim fTimesBoldItalic = fc.FindFamilyName(times, True, True)
        Dim fArial = fc.FindFamilyName(arial, False, False)
        Dim fIPAGothic = fc.FindFamilyName("IPAGothic", False, False)
        '' 異なるフォントとフォントサイズを使用して TextLayout にテキストを追加します。
        Dim tf = New TextFormat() With {.Font = fTimes, .FontSize = 12}
        tl.Append(makeSampleText(tf), tf)
        tf.Font = fTimesBold
        tf.FontSize += 2
        tl.Append(makeSampleText(tf), tf)
        tf.Font = fTimesItalic
        tf.FontSize += 2
        tl.Append(makeSampleText(tf), tf)
        tf.Font = fTimesBoldItalic
        tf.FontSize -= 4
        tl.Append(makeSampleText(tf), tf)
        tf.Font = fArial
        tf.FontSize += 2
        tl.Append(makeSampleText(tf), tf)
        tf.Font = fIPAGothic
        tf.FontSize -= 2
        tl.Append(makeSampleText(tf), tf)
        '' 異なる前景色と背景色でテキストを追加します。
        tf.Font = fTimesBold
        tf.ForeColor = Color.Tomato
        tl.Append(makeSampleText(tf), tf)
        tf.Font = fTimesBoldItalic
        tf.FontSize = 16
        tf.ForeColor = Color.SlateBlue
        tf.BackColor = Color.Orange
        tl.Append(makeSampleText(tf), tf)
        '' 再び透明な黒色で仕上げます。
        tl.Append("The end.", New TextFormat() With {.Font = fTimes, .FontSize = 14})
        tl.Append("- 終了 -", New TextFormat() With {.Font = fIPAGothic, .FontSize = 14})
        '' テキストのレイアウトと描画。
        tl.PerformLayout(True)
        g.DrawTextLayout(tl, PointF.Empty)
        ''
        '' PDF ドキュメントを保存します。
        doc.Save(stream)
        Return doc.Pages.Count
    End Function
End Class