フォントをロードする方法 | Aspose.Font for .NET
概要
フォントのロード方法について説明する前に、まず、すべてのフォントは物理的には何らかの形式で表現された「バイト配列」であることを理解する必要があります。 したがって、フォントを正しくロードするためには、以下の 2 つの重要なパラメーターを知る必要があります。
- フォント形式: フォントには
TrueType、Type1など、さまざまな形式があります。 - ストレージ (保存場所): フォントを表すバイナリデータがどこに保持されているか。各フォントはバイナリデータとして表現されますが、保存方法は異なります。多くの場合、フォントはハードドライブ上のファイルとして保存されています。しかし、フォントのバイナリデータがフォント自体ではない別のファイル(Microsoft Word の
.docxや Adobe Acrobat の.pdfなど)に含まれている場合もあります。
フォントのロードに必要なオブジェクトとパラメーター
Aspose.Font for .NET では、フォントのロードに必要な 2 つの主要なパラメーターを指定するために FontDefinition オブジェクトを使用します。 FontDefinition オブジェクトを作成して初期化した後、静的メソッド Aspose.Font.Font.Open() を呼び出し、引数として初期化した FontDefinition オブジェクトを渡すだけで、目的のフォントをロードして参照を取得できます。
擬似コードで説明すると以下のようになります。
1
2using Aspose.Font;
3 ...
4
5 // 適切なプロパティで FontDefinition オブジェクトを初期化
6 FontDefinition fontDef = new FontDefinition();
7 Font desiredFont = Font.Open(fontDef);フォントのロードが完了すると、 Aspose.Font.Font 型のオブジェクトが得られます。 Aspose.Font.Font クラスは Aspose.Font for .NET ライブラリのベースとなるフォントクラスであり、フォントを操作するための主要な機能を提供します。
Aspose.Font.Font 型のオブジェクトにフォントをロードすると、そのフォントを使用したテキストのレンダリング、エンコーディング情報の取得、フォントメトリクスの取得が可能になります。また、フォントの修正や保存なども行えます。
FontDefinition オブジェクトを初期化するには、前述の通り、フォント形式(フォーマットタイプ)と、フォントバイナリデータの保存場所を記述するオブジェクトの 2 つのパラメーターを指定する必要があります。 最初のパラメーターは FontType 列挙型で指定します。
2 番目のパラメーターの扱いを簡素化するために、Aspose.Font はフォントの場所に関係なく、バイナリデータに一貫してアクセスできる一連のオブジェクトを提供しています。
このユニバーサルなアクセスは「バイトストリーム」の概念によって実現されています。 フォントがディスク上のファイル、別のファイル内、あるいはメモリ内のバイト配列のどこにあっても、特別な Aspose.Font オブジェクトを使用することで、目的のフォントに関連するバイトストリームにアクセスできます。
これらのオブジェクトについて説明します。
StreamSource クラス: この抽象基底クラスは、フォントのバイトストリームへのアクセスを提供するプロパティとメソッドを定義します。 このクラスの GetFontStream() メソッドは、バイナリフォントデータに関連するストリームを返します。 Offset プロパティは、データの読み取りを開始すべきストリーム内の位置を指します。
StreamSource から継承された、最もよく使われる 2 つのクラス:
- FileSystemStreamSource: ファイルシステムベースのストリームアクセスを提供します。 FileName プロパティはフォントファイルの名前を返し、 GetFontStream() メソッドはそのファイルに関連するバイトストリームを返します。
- ByteContentStreamSource: バイト配列ベースのストリームアクセスを提供します。
クラスの初期化方法
これらのクラスの初期化例を以下に示します。
- フォントが
Lora.ttfという名前のファイルにある場合、このフォントのバイトストリームにアクセスするには、コンストラクターを使用して FileSystemStreamSource オブジェクトを作成します。
1
2 FileSystemStreamSource fontSource = new FileSystemStreamSource("Lora.ttf");- フォントのバイナリデータが
byte[] fontArray変数で定義されたバイト配列にある場合、 ByteContentStreamSource オブジェクトがデータストリームへのアクセスを提供します。
1
2 ByteContentStreamSource fontSource = new ByteContentStreamSource(fontArray);このように、バイナリデータへのアクセスには StreamSource クラスから継承されたオブジェクトを使用します。これらを「フォントストリームソース」と呼びます。
FontFileDefinition オブジェクト
ほとんどのフォントは通常のファイルにありますが、一部のフォントは異なるデータソースを持つ場合があります。Aspose.Font ライブラリは、「ファイル」と「フォントバイナリストリーム」の概念を 1 つのオブジェクトに統合するための特別なオブジェクト FontFileDefinition を提供しています。
このオブジェクトには以下のプロパティがあります。
- FileName: フォントファイルの名前。
- FileExtension: フォントファイルの拡張子。
- StreamSource: フォントストリームソース。
- Offset: フォントバイトストリーム内のオフセット。
最も頻繁に使用されるコンストラクターの 1 つは、署名 FontFileDefinition(FileInfo fontFile) を持つものです。目的のフォントがディスク上のファイルである場合に使用します。
以下は、C:\Windows\Fonts\Montserrat.ttf にある Montserrat フォント用にこのオブジェクトを初期化する例です。
1
2 FontFileDefinition fileDef = new FontFileDefinition(new FileInfo(@"C:\Windows\Fonts\Montserrat.ttf"));また、
FontFileDefinition は以下のコンストラクターを使用して Montserrat フォントを参照することもできます。
1
2 FontFileDefinition fileDef = new FontFileDefinition(new FileSystemStreamSource(@"C:\Windows\Fonts\Montserrat.ttf"));
3
4 FontFileDefinition fileDef = new FontFileDefinition("ttf", new FileSystemStreamSource(@"C:\Windows\Fonts\Montserrat.ttf"));パラメーター
FileExtension は、フォント形式に応じた標準の拡張子と一致する必要があります。例えば形式が TrueType の場合、値は ttf または ttc(フォントファイルが TrueType コレクションの場合)になります。形式が Embedded OpenType の場合、値は eot である必要があります。
以下の表は、Aspose.Font for .NET で最も頻繁に使用されるフォントファイル形式と、 FileExtension パラメーターに指定すべき一致する値を示しています。
| フォントファイル形式 | FileExtension |
|---|---|
TrueType (単一フォント) | ttf |
TrueType フォントコレクション | ttc |
Web Open Font Format | woff |
Web Open Font Format 2.0 | woff2 |
Embedded OpenType | eot |
Adobe Type 1 フォント | pfa, pfb, afm, pfm |
Compact Font Format | cff (null も可) |
フォントデータがバイトストリームの開始位置(0)から始まらない場合は、 Offset パラメーターを持つ以下のコンストラクターを使用します。
1
2 FontFileDefinition(string fileExtension, StreamSource streamSource, long offset);FontDefinition オブジェクトを初期化する方法
StreamSource を継承したオブジェクトを介したフォントバイトストリームへのアクセスと、 FontFileDefinition オブジェクトの概念を理解したところで、さまざまな状況で FontDefinition オブジェクトを正しく初期化する方法を説明します。
FontDefinition オブジェクトには、多くのオーバーロードされたコンストラクターが用意されています。すべてのコンストラクターに共通する特徴は、フォント形式のタイプを指定する FontType パラメーターです。前述のように、[FontType] 値に加えて、フォントバイナリデータへの参照を使用して初期化する必要があります。
この場合、 FontDefinition のコンストラクターで以下のパラメーターを使用できます。
- fontName
- fileExtension
- StreamSource 型のオブジェクト
- FontFileDefinition 型のオブジェクト
なぜ [fileExtension] パラメーターを渡す必要があるのでしょうか?それの理由は、[FontType] は一般的なフォント形式を定義しますが、特定のファイルのフォント形式までは定義しないからです。同じ形式のフォントであっても、ファイル形式が異なる場合があります。
例えば FontType.TTF は TrueType 形式を定義しますが、TrueType には拡張子が ttf、eot、ttc などのフォントファイルが含まれます。もし形式が EOT のフォントに対して FontType.TTF のみを渡した場合、オブジェクトはそれが ttf 形式ではなく eot 形式であることを正しく判別できません。同様に FontType.Type1 は Type1 の一般的な定義であり、実際のファイル拡張子は .pfa、.pfb、.afm、.pfm などになります。そのため、形式を正しく定義するには、[FontType] とともに [fileExtension] パラメーターの値を指定する必要があります。
以下に、さまざまなケースにおける FontDefinition オブジェクトの初期化とフォントロードの例を示します。
すべての場合において、最終的なロード結果は Aspose.Font.Font 型の変数に格納されます。この型は Aspose.Font ライブラリの基本クラスであり、フォントを操作するための共通機能を提供します。ロード後は、そのフォントでのテキストレンダリングやメトリクス、エンコーディング情報の取得などが可能になります。
フォントをロードする方法の例
例として、ファイル C:\Windows\Fonts\Montserrat.ttf から Montserrat フォントをロードしてみましょう。
ファイルの先頭に以下の名前空間を追加します。
1 using System;
2 using Aspose.Font;
3 using Aspose.Font.Sources;
4 using System.IO;[FontDefinition] と [FontFileDefinition] を使用して、いくつかの方法でロードできます。
System.IO.FileInfo オブジェクトを使用してロードする
以下の手順でロードを実行します。
- ファイルへのパスを構築します。
FileInfoを使用して [FontFileDefinition] オブジェクトを作成します。- [FontType] に
TTFを指定して [FontDefinition] を初期化します。拡張子は自動的に計算されます。 - フォントをロードします。
1 // ファイルへのパスを構築
2 string fontPath = @"C:\Windows\Fonts\Montserrat.ttf";
3
4 // FileInfo を使用して FontFileDefinition オブジェクトを初期化
5 FontFileDefinition fileDef = new FontFileDefinition(new FileInfo(fontPath));
6
7 // FileInfo から拡張子が自動的に計算されます
8 FontDefinition fontDef = new FontDefinition(FontType.TTF, fileDef);
9
10 // フォントをロード
11 Font font = Font.Open(fontDef);FileSystemStreamSource オブジェクトを使用してロードする
以下の手順を実行します。
- ファイルへのパスを構築します。
- 拡張子 “ttf” と
FileSystemStreamSourceを指定して [FontFileDefinition] を初期化します。 - [FontDefinition] オブジェクトを初期化します。
- フォントをロードします。
1 // ファイルへのパスを構築
2 string fontPath = @"C:\Windows\Fonts\Montserrat.ttf";
3
4 // 拡張子 "ttf" と FileSystemStreamSource を使用して FontFileDefinition を初期化
5 FontFileDefinition fileDef = new FontFileDefinition("ttf", new FileSystemStreamSource(fontPath));
6
7 // fileDef に基づいて FontDefinition を作成
8 FontDefinition fontDef = new FontDefinition(FontType.TTF, fileDef);
9
10 // フォントをロード
11 Font font = Font.Open(fontDef);FontFileDefinition オブジェクトを使わず、FileSystemStreamSource を直接 FontDefinition に渡してロードする
この方法では、以下のアクションを実行します。
- ファイルへのパスを構築します。
- [FontType] 値 (
TTF)、拡張子 (ttf)、およびFileSystemStreamSourceオブジェクトを渡して [FontDefinition] を初期化します。ここでの拡張子パラメーターは、正しい形式検出のために必要です。 - フォントをロードします。
1 // ファイルへのパスを構築
2 string fontPath = @"C:\Windows\Fonts\Montserrat.ttf";
3
4 // FontType、拡張子、および FileSystemStreamSource オブジェクトを渡して FontDefinition を初期化
5 // 'ttf' パラメーターは正しい形式検出のために必要です
6 FontDefinition fontDef = new FontDefinition(FontType.TTF, "ttf", new FileSystemStreamSource(fontPath));
7
8 // フォントをロード
9 Font font = Font.Open(fontDef);ByteContentStreamSource オブジェクトを使用してバイト配列からロードする
バイト配列からフォントをロードするには、以下を行う必要があります。
- フォントのバイナリデータをバイト配列に読み込みます。
- その配列に基づいた
ByteContentStreamSourceを使用し、[FontType] と拡張子を指定して [FontDefinition] を初期化します。 - フォントをロードします。
1 // fontBytes にフォントのバイナリデータが読み込まれていると仮定
2 byte[] fontBytes = File.ReadAllBytes(@"C:\Windows\Fonts\Montserrat.ttf");
3
4 // FontType、拡張子、および ByteContentStreamSource を渡して FontDefinition を初期化
5 FontDefinition fontDef = new FontDefinition(FontType.TTF, "ttf", new ByteContentStreamSource(fontBytes));
6
7 // フォントをロード
8 Font font = Font.Open(fontDef);Aspose.Font のその他の使用例については、ドキュメントリポジトリの Aspose.Font.Examples.sln を参照してください。
ご質問や問題がある場合は、 Aspose.Font 製品ファミリー セクションの 無料サポートフォーラム に投稿してください。サポートチームが迅速に対応いたします。