FontFromFile.vb
''
'' このコードは、DioDocs for PDF のサンプルの一部として提供されています。
'' © MESCIUS inc. All rights reserved.
''
Imports System.IO
Imports System.Drawing
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Text
Imports GCTEXT = GrapeCity.Documents.Text
Imports GCDRAW = GrapeCity.Documents.Drawing
'' このサンプルは、フォントをファイルから読み込み、コード内で
'' 使用してテキストをレンダリングする方法を示します。このサンプルでは、
'' Resources/Fontsフォルダに NotoSerif-Regular.ttf と NotoSerif-BoldItalic.ttf が必要です。
''
'' 注記1: Font.FromFile() を使用すると、実際のデータがオンデマンドでロード
'' されるため、通常は Font インスタンスがあまりにも多くの領域を占有することは
'' ありません。Font.FromArray() と Font.FromStream() メソッドを使用して作成
'' されたフォントでは状況が異なります。その場合、フォント全体がすぐにメモリに
'' 読み込まれます。フォントは依然としてオンデマンドでのみ解析されますが、
'' メモリ消費量はやや高いので、一般的には Font.FromFile() を使用するのが望ま
'' しいでしょう。
''
'' 注記2: PDF でテキストをレンダリングするために、前述の静的コンストラクタの
'' いずれかを使用して作成された異なるフォントインスタンスが使用される場合、
'' グリフが同じであったとしても、DsPdf はそれらが同じ物理フォントを表すことを
'' 知る方法がないため、各インスタンスは別個のサブセットを埋め込むことになります。
'' そのため、それぞれの物理フォントに対して1つの Font インスタンスが作成されて
'' いることを確認するか、FontCollection クラスを使用して必要なフォントを追加し、
'' TextFormat.FontName で指定することをお勧めします。
Public Class FontFromFile
Function CreatePDF(ByVal stream As Stream) As Integer
Const sample = "The quick brown fox jumps over the lazy dog."
Const fnRegular = "NotoSerif-Regular.ttf"
Const fnBoldItalic = "NotoSerif-BoldItalic.ttf"
Dim fRegular = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", fnRegular))
If fRegular Is Nothing Then
Throw New Exception($"{fnRegular} フォントを読み込めません")
End If
'' 読み込んだフォントを利用してテキストを描画します。
Dim tf = New TextFormat() With {.Font = fRegular, .FontSize = 12}
Dim doc = New GcPdfDocument()
Dim g = doc.NewPage().Graphics
g.DrawString($"Font {fRegular.FontFamilyName}, size {tf.FontSize}: {sample}", tf, New PointF(18, 72))
'' フォントサイズを変更することができます。
tf.FontSize += 2
g.DrawString($"Font {fRegular.FontFamilyName}, size {tf.FontSize}: {sample}", tf, New PointF(18, 72 * 2))
'' 通常のフォントで太字や斜体のスタイルをエミュレートすることできます。
tf.FontStyle = GCTEXT.FontStyle.BoldItalic
g.DrawString($"Font {fRegular.FontFamilyName}, emulated Bold Italic: {sample}", tf, New PointF(18, 72 * 3))
'' もちろんエミュレートされたフォントよりも、実際の太字/斜体フォントを使用するほうが優れています。
'' 最後に実際の太字の斜体フォントを得て、それと一緒に行を印刷します。
Dim fBoldItalic = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", fnBoldItalic))
If fBoldItalic Is Nothing Then
Throw New Exception($"{fnBoldItalic} フォントを読み込めません")
End If
tf.Font = fBoldItalic
tf.FontStyle = GCTEXT.FontStyle.Regular
g.DrawString($"Font {fBoldItalic.FontFamilyName}, real Bold Italic: {sample}", tf, New PointF(18, 72 * 4))
'' PDF ドキュメントを保存します。
doc.Save(stream)
Return doc.Pages.Count
End Function
End Class