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

'' この短いサンプルは、フォントをファイルから読み込んで、コード内でテキスト
'' のレンダリングに使用する方法を示しています。サンプルは、Resources/Fonts 
'' フォルダに存在するフォントファイルGabriola.ttf および timesbi.ttf に依存
'' しています。
'' 
'' 注記1: Font.FromFile() を使用すると、実際のデータがオンデマンドでロード
'' されるため、通常は Font インスタンスがあまりにも多くの領域を占有することは
'' ありません。Font.FromArray() と Font.FromStream() メソッドを使用して作成
'' されたフォントでは状況が異なります。その場合、フォント全体がすぐにメモリに
'' 読み込まれます。フォントは依然としてオンデマンドでのみ解析されますが、
'' メモリ消費量はやや高いので、一般的には Font.FromFile() を使用するのが望ま
'' しいでしょう。
'' 
'' 注記2: PDF でテキストをレンダリングするために、前述の静的コンストラクタの
'' いずれかを使用して作成された異なるフォントインスタンスが使用される場合、
'' グリフが同じであったとしても、GcPdf はそれらが同じ物理フォントを表すことを
'' 知る方法がないため、各インスタンスは別個のサブセットを埋め込むことになります。
'' そのため、それぞれの物理フォントに対して1つの Font インスタンスが作成されて
'' いることを確認するか、FontCollection クラスを使用して必要なフォントを追加し、
'' TextFormat.FontName で指定することをお勧めします。
Public Class FontFromFile
    Function CreatePDF(ByVal stream As Stream) As Integer
        Dim gabriola = Font.FromFile(Path.Combine("Resources", "Fonts", "Gabriola.ttf"))
        If gabriola Is Nothing Then
            Throw New Exception("Gabriola フォントを読み込めません")
        End If

        '' 既存のフォントを利用してテキストを描画します。
        Dim tf = New TextFormat() With {.Font = gabriola, .FontSize = 16}
        Dim doc = New GcPdfDocument()
        Dim g = doc.NewPage().Graphics
        g.DrawString($"{gabriola.FontFamilyName} で描画したサンプルテキスト", tf, New PointF(72, 72))
        '' フォントサイズを変更することができます。
        tf.FontSize += 4
        g.DrawString("The quick brown fox jumps over the lazy dog.", tf, New PointF(72, 72 * 2))
        '' 太字または斜体ではないフォントで太字または斜体をエミュレートすることができます。その例です。
        tf.FontStyle = FontStyle.Bold
        g.DrawString("この行は、エミュレートされた太字のスタイルを使用して、同じフォントで印刷されます。", tf, New PointF(72, 72 * 3))
        '' もちろんエミュレートされたフォントよりも、実際の太字/斜体フォントを使用するほうが優れています。
        '' 最後に実際の太字の斜体フォントを得て、それと一緒に行を印刷します。
        Dim timesbi = Font.FromFile(Path.Combine("Resources", "Fonts", "timesbi.ttf"))
        If timesbi Is Nothing Then
            Throw New Exception("timesbi フォントを読み込めません")
        End If
        tf.Font = timesbi
        tf.FontStyle = FontStyle.Regular
        g.DrawString($"{timesbi.FullFontName} で描画したサンプルテキスト", tf, New PointF(72, 72 * 4))
        ''
        '' PDF ドキュメントを保存します。
        doc.Save(stream)
        Return doc.Pages.Count
    End Function
End Class