EUDC.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 System.Collections.Generic
Imports System.Linq

'' カスタム EUDC フォント(.tte)にて、私用領域の Unicode 文字(PUA)をレンダリングする方法を示します。
Public Class EUDC
    Function CreatePDF(ByVal stream As Stream) As Integer
        '' EUDC コード文字と通常の文字(& と !)を組み合わせたテスト用文字列。0xE620 0xE621 0xE622 0xE624 amp; 0xE623 !
        Const tstr = "&!"
        '' 設定。
        Dim doc = New GcPdfDocument()
        Dim page = doc.NewPage()
        Dim g = page.Graphics
        Dim tf = New TextFormat() With {.FontSize = 14}
        Dim rc = Util.AddNote(
                "カスタム EUDC フォント(.tte)でプライベートユース Unicode 文字(PUA)をレンダリングする方法を示しています。" + vbLf +
                "GrapeCity.Documents.Text.Fontは、EUDC .tte ファイルから作成し、" +
                "Font.AddEudcFont() メソッドを使用して1つ以上のフォントにリンクすることができます。",
                page)
        Const dy = 36.0F
        Dim ip = New PointF(rc.X, rc.Bottom + dy / 2)

        '' FontCollection を使用すると、ファミリ名でフォントを取得できます。
        Dim fc = New FontCollection()

        '' グラフィックスの MeasureString/DrawString メソッドがフォールバックフォントを
        '' 検出できるように、フォントコレクションをグラフィックスに割り当てます。
        g.FontCollection = fc

        '' 標準のフォントを FontCollection に登録します。
        fc.RegisterFont(Path.Combine("Resources", "Fonts", "arial.ttf"))
        fc.RegisterFont(Path.Combine("Resources", "Fonts", "times.ttf"))
        fc.RegisterFont(Path.Combine("Resources", "Fonts", "ipag.ttc"))
        fc.RegisterFont(Path.Combine("Resources", "Fonts", "msgothic.ttc"))
        fc.RegisterFont(Path.Combine("Resources", "Fonts", "YuGothR.ttc"))

        '' フォントコレクションにMS Gothicをフォールバックとして使用するように指示します。
        fc.AppendFallbackFonts(fc.FindFamilyName("MS Gothic"))

        '' Arial フォントを使用すると、適切なグリフが Aria lに存在しないため、テスト文字列が空の長方形としてレンダリングされます。
        tf.Font = fc.FindFamilyName("Arial", False, False)
        g.DrawString($"Arial: {tstr} (EUDCフォントはまだリンクされていません)", tf, ip)
        ip.Y += dy

        '' 2種類の EUDC フォントを読み込みます。
        Dim eudcF0 = Font.FromFile(Path.Combine("Resources", "Fonts", "Eudc0.tte"))
        Dim eudcF1 = Font.FromFile(Path.Combine("Resources", "Fonts", "Eudc1.tte"))

        '' 1つの EUDC フォントを Arial にリンク - これにより、Arial で描画された文字列において、EUDC の文字はこのフォントで検索されます。
        Dim fnt = fc.FindFamilyName("Arial")
        fnt.AddEudcFont(eudcF0)
        '' MS Gothic も同様に。
        fnt = fc.FindFamilyName("MS Gothic")
        fnt.AddEudcFont(eudcF1)
        '' 別の EUDC フォントを Yu Gothic にリンク。
        fnt = fc.FindFamilyName("Yu Gothic")
        fnt.AddEudcFont(eudcF1)

        '' カスタム EUDC フォントがリンクされているフォントを使用して、EUDC 文字列を描画します。
        tf.Font = fc.FindFamilyName("Arial", False, False)
        g.DrawString($"Arial, Eudc0.tte をリンク: {tstr}", tf, ip)
        ip.Y += dy
        tf.Font = fc.FindFileName("times.ttf")
        g.DrawString($"Times, MS Gothic 経由のフォールバック: {tstr}", tf, ip)
        ip.Y += dy
        tf.Font = fc.FindFamilyName("MS Gothic")
        g.DrawString($"MS Gothic, Eudc1.tte をリンク: {tstr}", tf, ip)
        ip.Y += dy
        tf.Font = fc.FindFamilyName("Yu Gothic")
        g.DrawString($"Yu Gothic, Eudc1.tte をリンク: {tstr}", tf, ip)
        ip.Y += dy

        '' FontCollection はファミリ名によるフォント検索のようないくつかのサービスを追加しますが、
        '' EUDC フォントはコレクションにないフォントにリンクできます。
        fnt = Font.FromFile(Path.Combine("Resources", "Fonts", "Gabriola.ttf"))
        fnt.AddEudcFont(eudcF0)
        tf.Font = fnt
        g.DrawString($"Gabriola Font, Eudc0.tte をリンク: {tstr}", tf, ip)
        ip.Y += dy
        ''
        '' PDF ドキュメントを保存します。
        doc.Save(stream)
        Return doc.Pages.Count
    End Function
End Class