EUDC.vb
''
'' このコードは、DioDocs for PDF のサンプルの一部として提供されています。
'' © MESCIUS 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
Imports GCTEXT = GrapeCity.Documents.Text
Imports GCDRAW = GrapeCity.Documents.Drawing
'' 独自の EUDC フォント(.tte)にて、私用領域(PUA)の Unicode 文字をレンダリングする方法を示します。
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)を使用して、私用領域(PUA)の Unicode 文字をレンダリングする方法を示しています。" + 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", "NotoSerifJP-Regular.ttf"))
fc.RegisterFont(Path.Combine("Resources", "Fonts", "NotoSansJP-Regular.ttf"))
fc.RegisterFont(Path.Combine("Resources", "Fonts", "ipag.ttc"))
'' フォントコレクションにNoto Serifをフォールバックとして使用するように設定します。
fc.AppendFallbackFonts(fc.FindFamilyName("Noto Serif JP"))
'' Noto Sans フォントを使用すると、適切なグリフが Noto Sans に存在しないため、テスト文字列が空の長方形としてレンダリングされます。
tf.Font = fc.FindFamilyName("Noto Sans JP", False, False)
g.DrawString($"Noto Sans: {tstr} (EUDCフォントはまだリンクされていません)", tf, ip)
ip.Y += dy
'' 2種類の EUDC フォントを読み込みます。
Dim eudcF0 = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "Eudc0.tte"))
Dim eudcF1 = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "Eudc1.tte"))
'' 1つの EUDC フォントを Noto Sans にリンク - これにより、Noto Sans で描画された文字列において、EUDC の文字はこのフォントで検索されます。
Dim fnt = fc.FindFamilyName("Noto Sans JP")
fnt.AddEudcFont(eudcF0)
'' Noto Serif も同様に。
fnt = fc.FindFamilyName("Noto Serif JP")
fnt.AddEudcFont(eudcF1)
'' 別の EUDC フォントを IPAゴシック にリンク。
fnt = fc.FindFamilyName("IPAGothic")
fnt.AddEudcFont(eudcF1)
'' 独自の EUDC フォントがリンクされているフォントを使用して、EUDC 文字列を描画します。
tf.Font = fc.FindFamilyName("Noto Sans JP", False, False)
g.DrawString($"Noto Sans, Eudc0.tte をリンク: {tstr}", tf, ip)
ip.Y += dy
tf.Font = fc.FindFileName("NotoSerifJP-Regular.ttf")
g.DrawString($"Noto Sans, Noto Serif 経由のフォールバック: {tstr}", tf, ip)
ip.Y += dy
tf.Font = fc.FindFamilyName("IPAGothic")
g.DrawString($"IPAGothic, Noto Serif をリンク: {tstr}", tf, ip)
ip.Y += dy
tf.Font = fc.FindFamilyName("IPAGothic")
g.DrawString($"IPAGothic, Eudc1.tte をリンク: {tstr}", tf, ip)
ip.Y += dy
'' FontCollection はファミリ名によるフォント検索のようないくつかのサービスを追加しますが、
'' EUDC フォントはコレクションにないフォントにリンクできます。
fnt = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "VLADIMIR.TTF"))
fnt.AddEudcFont(eudcF0)
tf.Font = fnt
g.DrawString($"VLADIMIR Font, Eudc0.tte をリンク: {tstr}", tf, ip)
ip.Y += dy
''
'' PDF ドキュメントを保存します。
doc.Save(stream)
Return doc.Pages.Count
End Function
End Class