フォントをロードする方法は? | C ++のAPIソリューション
概要
質問、フォントのロード方法に答えるには、最初に、フォントは物理的にデータが何らかの形式で表されるバイトの配列であることを学ぶ必要があります。 したがって、正しいフォントの読み込みをするには、2つの重要なパラメーターを知る必要があります。
- フォント形式。フォントには、
trueType
、Type1
などのような異なる形式を持つことができます。 - ストレージ。フォントを表すバイナリデータが保持されています。各フォントはバイナリデータとして表されますが、このデータの保存方法が異なる場合があります。ほとんどの場合、フォントはハードドライブのファイルとして保存されています。ただし、フォントバイナリデータは、フォント自体ではない別のファイルに配置できる場合があります。たとえば、Microsoft WordまたはAdobe Acrobatによって作成されたファイル。これらは、拡張機能
.docx
、.pdf
を持つファイルです。さまざまなフォントを含めることができます。
フォントロードに必要なオブジェクトとパラメーター
C ++のAspose.Fontは、フォントの負荷に要求される2つの重要なパラメーターを通知するために、オブジェクト fontdefinitonを与えます。
fontdefinitonオブジェクトを作成して開始した後、staticメソッドを呼び出す必要があります aspose.font.font.open()は、パラメーターとして初期化されたオブジェクト fontdefinitonを渡すだけで、目的のフォントをロードして参照を取得します。
擬似コードで説明しましょう。
1using Aspose::Font;
2 ...
3
4 // Initialize object FontDefinition with appropriate properties
5 System::SharedPtr<FontDefinition> fontDef = System::MakeObject<FontDefinition>();
6 System::SharedPtr<Font> desiredFont = Aspose::Font::Font::Open(fd);
フォントロードの最終結果は、 aspose.font.fontタイプのオブジェクトを取得することです。 class aspose.font.fontは、C ++ライブラリの aspose.fontのベースフォントクラスです。これは、フォントを使用する主な機能を表しています。
フォントを aspose.font.fontタイプオブジェクトにして、このフォントでテキストをレンダリングし、エンコードデータを取得し、フォントメトリックを取得できます。また、このフォントなどを変更または保存することもできます。
fontdefinitonオブジェクトを開始するには、 fontdefinition()2フォントパラメーターを指定する必要があります。 最初のパラメーターは fonttype列挙で通知されます。
2番目のパラメーターで作業を簡素化するために、 aspose.fontは、フォントが配置されている場所から独立してフォントバイナリデータに普遍的にアクセスできる一連のオブジェクトを提供します。
このユニバーサルアクセスは、バイトストリームなどのものとリンクしています。 したがって、フォントが配置されている場所から独立して - ディスク上のファイル、別のファイル内、メモリ内のバイト配列 - いずれにせよ、特別な aspose.fontオブジェクトは、目的のフォントに関連するバイトストリームへのアクセスを提供します。
これらのオブジェクトを説明しましょう。
StreamSourceクラス。 この抽象的なベースクラスは、フォントバイトストリームにアクセスできるプロパティとメソッドを定義します。 getFontStream()このクラスの方法は、バイナリフォントデータに関連するストリームを返します。 プロパティ offsetは、このストリームの位置でポイントで、そこからデータの読み取りを開始する必要があります。
ベース StreamSourceから継承された2つの最も使用されているクラス:
- filesystemStreamSource - ファイルシステムに基づいて、ストリームへのアクセスを提供するように設計されています。 プロパティ filenameフォントファイルの名前を返します。 getFontStream()メソッドは、このファイルに関連するバイトストリームを返します。
- byteContentsStreamSource - バイト配列に基づいて、ストリームへのアクセスを提供します。
クラスを開始する方法は?
これらのクラスの開始の例を次に示します。
- フォントがlora.ttfという名前のファイルにあると仮定しましょう。この場合、このフォントのバイトストリームにアクセスするには、この単一のコンストラクターを使用して filesystemStymStreamSourceのオブジェクトを作成する必要があります。
1 System::SharedPtr<FileSystemStreamSource> fontSource = System::MakeObject<FileSystemStreamSource>("Lora.ttf");
- フォントバイナリデータがBYTE [] fontArray変数によって定義されたバイナリ配列に配置されている場合、 byteContentsStreamSourceのオブジェクトは、フォントレイ変数に基づいてフォントデータストリームへのアクセスを提供します。 フォントバイトストリームにアクセスするには、 byteContentsStreamSourceのオブジェクトを作成して、このようなコードを使用してフォントバイト配列に関連するストリームにアクセスする必要があります。
1 System::SharedPtr<ByteContentStreamSource> fontSource = System::MakeObject<ByteContentStreamSource>(fontArray);
したがって、フォントバイナリデータへのアクセスを提供するには、ベース StreamSourceクラスから継承されたオブジェクトを使用します。さらに、そのようなオブジェクトを呼び出しますフォントストリームソース。
FontFileDefinitionオブジェクト
ほとんどのフロントは通常のファイルにありますが、同時に、フォントの一部に異なるデータソースがある場合があります。 1つのオブジェクト用語に結合するファイルおよびフォントバイナリストリーム、 aspose.fontライブラリは特別なオブジェクトを提供します fontfiledefinition。
このオブジェクトにはそのようなプロパティがあります。
- filename - フォントファイルの名前。
- fileextension - フォントファイルの拡張。
- StreamSource - フォントストリームソース。
- offset - フォントバイトストリーム内のオフセット。
このオブジェクトの最も単純で最も使用されているコンストラクターの1つは、次の署名を持つコンストラクターです。
これは、ファイルC:\Windows\Fonts\Montserrat.ttfにあるフォントmontserrat
のこのようなオブジェクトを開始する例です。
1 System::SharedPtr<FontFileDefinition> fileDef = System::MakeObject<FontFileDefinition>(System::MakeObject<System::IO::FileInfo>(u"C:\\Windows\\Fonts\\Montserrat.ttf"));
また、 fontfiledefinitionは、次のコンストラクターを使用して「Montserrat`フォントを参照できます。
1 System::SharedPtr<FontFileDefinition> fileDef = System::MakeObject<FontFileDefinition>(System::MakeObject<FileSystemStreamSource>(u"C:\\Windows\\Fonts\\Montserrat.ttf"));
2
3 System::SharedPtr<FontFileDefinition> fileDef = System::MakeObject<FontFileDefinition>(u"ttf", System::MakeObject<FileSystemStreamSource>(u"C:\\Windows\\Fonts\\Montserrat.ttf"));
パラメーター
fileExtensionは、フォント形式の拡張機能の標準と一致する必要があります。たとえば、フォント形式がtrueType
の場合、
fileExtensionパラメーターの値はTTF
またはTTC
である可能性があります(フォントファイルがtrueType
のコレクションの場合)。
フォント形式が「埋め込まれたオープンタイプ」の場合、
fileExtensionパラメーターの値はEOT
でなければなりません。
以下の表は、C ++フォントファイル形式用のAspose.Fontで最も頻繁に使用されるものを示しています。そこには、 fileExtensionパラメーターが取るべき一致する値があります。
フォントファイル形式 | ファイル拡張子 |
---|---|
TrueType , single font | ttf |
TrueType font collection | ttc |
Web Open Font Format | woff |
Web Open Font Format version 2.0 | woff2 |
Embedded OpenType | eot |
Adobe Type 1 font | pfa , pfb , afm , pfm |
Compact Font Format | cff , can be null |
フォントデータがバイトストリームの位置0から開始されない場合、 offsetパラメーターで次のコンストラクターを使用します。
1 FontFileDefinition(System::String fileExtension, System::SharedPtr<Aspose::Font::Sources::StreamSource> streamSource, int64_t offset).
fontdefinitionオブジェクトを開始する方法は?
これで、 streamSourceクラスから継承されたオブジェクトのアイデアが得られ、フォントバイトストリームへのアクセスと fontfiledefinitionオブジェクトのアクセスを提供すると、これらの異なる状況のために適切にこれらのオブジェクトを開始する方法を説明します。
fontdefinitonオブジェクトは、多くのオーバーロードされたコンストラクターを提供します。 既存のすべてのコンストラクターの共通の特徴は、 fonttypeパラメーターです。フォント形式のタイプを説明します。
前に述べたように、 fonttype値は別として、オブジェクト fontdefinitonは、フォントバイナリデータを参照して初期化する必要があります。
この場合、 fontdefinitonコンストラクターの次のパラメーターを使用できます。
- fontname;
- fileExtension;
- StreamSourceタイプのオブジェクト。
- fontFileDefinitionタイプのオブジェクト。
質問があるかもしれません。パラメーター fileExtension(52)(52)または fontfileDefinitionオブジェクトにパラメーターを渡すのはなぜですか? 問題は、 fonttypeが fileextensionの値と必ずしも一致しないことです。 fonttype特定のファイルのフォント形式ではなく、一般的なフォント形式を定義します。 1つの形式の一部のフォントには、異なるファイル形式があります。
たとえば、値fonttype.ttfはtrueType
形式を定義します。ただし、同時にtrueType
にはいくつかのフォント形式が含まれており、拡張機能TTF
、EOT
、TTC
などのフォントファイルがあります。たとえば、EOT
形式のフォントの場合、
fontdefinitonのみに渡された場合、fonttype.ttf値のみに、このオブジェクトは、フォントがEOT
形式に属し、TTF
ではなくEOT
形式に属していることをどのように理解しますか?
同様に、fonttype.type1の値は、この形式のフォントの一般的な定義です。同時に、 type1
フォントフォントファイルには拡張機能 .pfa
、 .pfb
、 .afm
、 .pfm
があります。そのため、FonType.type1値のみに適切に依存して、フォントファイル形式を定義することはできません。したがって、フォント形式を正しく定義するには、
fileExtensionパラメーターの値でパラメーター
fonttypeを指定する必要があります。
以下では、 fontdefinitonオブジェクトの初期化の例と、さまざまなケースのフォントロードの例をご覧ください。
すべての場合において、最終的なフォントロード結果が aspose.font.fontタイプの変数に配置されます。このタイプは、 aspose.fontライブラリの基本的なフォントクラスであり、このタイプのオブジェクトは、フォントを使用するための共通のベース機能を提供します。
このオブジェクトにフォントをロードすると、このフォントでテキストをレンダリングし、コーディング情報、フォントメトリックなどを取得できます。
フォントをロードする方法の例
例として、ファイルC:\Windows\Fonts\Montserrat.ttfからフォントmontserrat
をロードしてみましょう
ファイルの頭に次の名前空間を追加します。
1using Aspose::Font;
2using Aspose::Font::Sources;
3using System::IO;
fontdefinitonおよび fontfiledefinitionを使用して、このフォントをいくつかの異なる方法でロードできます。
System::IO::FileInfo オブジェクトを利用して読み込む
負荷を満たすには、次を実行します。
- ファイルへのパスを構築します。
- fontdefinitonを開始します。
fonttype値として
ttf
を渡します。 - 自動的に計算された値 fileExtensionを取得します。
- フォントをロードします。
1 // Construct path to the file
2 System::String fontPath = u"C:\\Windows\\Fonts\\Montserrat.ttf";
3
4 // Initialize FontDefinition object passing TTF as FontType value and using FontFileDefinition
5 System::SharedPtr<FontFileDefinition> fileDef = System::MakeObject<FontFileDefinition>(System::MakeObject<System::IO::FileInfo>(fontPath));
6
7 // Based on FileInfo object, fileExtension value is calculated automatically from FileInfo fields.
8 System::SharedPtr<FontDefinition> fontDef = System::MakeObject<FontDefinition>(Aspose::Font::FontType::TTF, fileDef);
9
10 // Load font
11 System::SharedPtr<Font> font = Font::Open(fontDef);
ファイルSystemStreamSourceタイプオブジェクトのヘルプを使用してロードします
次の手順を実行して、手術を実現します。
- ファイルへのパスを構築します。
- fontdefinitonオブジェクトを開始します。
- fileExtensionを
TTF
に設定します。 - フォントをロードします。
1 // Construct path to the file
2 System::String fontPath = u"C:\\Windows\\Fonts\\Montserrat.ttf";
3
4 // Initialize FontDefinition object passing TTF as FontType value and using FontFileDefinition
5 System::SharedPtr<FontFileDefinition> fileDef = System::MakeObject<FontFileDefinition>(u"ttf", System::MakeObject<FileSystemStreamSource>(fontPath));
6
7 // Based on FileSystemStreamSource object, set fileExtension to "ttf"
8 System::SharedPtr<FontDefinition> fontDef = System::MakeObject<FontDefinition>(Aspose::Font::FontType::TTF, fileDef);
9
10 // Load font
11 System::SharedPtr<Font> font = Font::Open(fontDef);
FONTFILEDEFINITIONオブジェクトなしのフォントロード、FilesSystemStreamSourceを直接fontDefinitionに直接通過させます
この方法でフォントをロードするには、次のアクションを実行する必要があります。
- ファイルへのパスを構築します。
- fontdefinitonを開始するオブジェクトは
fonttype値として
ttf
を渡します。パラメーター fileExtensionここには、パラメーター fonttypeの重複値ではありません。 - フォントをロードします。
1 // Construct path to the file
2 System::String fontPath = u"C:\\Windows\\Fonts\\Montserrat.ttf";
3
4 // Initialize FontDefinition object passing TTF as FontType value, "ttf" as fileExtension value,
5 // and FileSystemStreamSource object. Parameter 'fileExtension' here is not duplicate value
6 // for parameter 'FontType' and it's needed for correct font format detection
7 System::SharedPtr<FontDefinition> fontDef = System::MakeObject<FontDefinition>(Aspose::Font::FontType::TTF, u"ttf", System::MakeObject<FileSystemStreamSource>(fontPath));
8
9 // Load font
10 System::SharedPtr<Font> font = Font::Open(fontDef);
バイト[]タイプ変数を使用して、bytecontentsStreamSourceタイプオブジェクトを使用してフォントロード
バイト配列からフォントをロードするには、次のことが必要です。
- ファイルへのパスを構築します。
- フォントバイナリデータをバイト配列にロードします
- fontdefinitonオブジェクトを
fonttype値として渡すオブジェクト、
fileextension値として
ttf
を渡します。 - フォントをロードします。
1 // Construct path to the file
2 System::String fontPath = u"C:\\Windows\\Fonts\\Montserrat.ttf";
3
4 // Load font binary data into byte array
5 System::ArrayPtr<uint8_t> fontBytes;
6
7 // Initialize FontDefinition object passing TTF as FontType value, "ttf" as fileExtension value,
8 // and ByteContentStreamSource object based on fontBytes array
9 System::SharedPtr<FontDefinition> fontDef = System::MakeObject<FontDefinition>(Aspose::Font::FontType::TTF, u"ttf", System::MakeObject<ByteContentStreamSource>(fontBytes));
10
11 // Load font
12 System::SharedPtr<Font> font = Font::Open(fontDef);
Aspose.fontを使用する例を取得するには、 aspose.font documentationの cpp-examplesで aspose.font.examples.cpp.sln solutionに移動します。
問題や質問が残っている場合は、 aspose.font.product family free support forumのセクションに投稿することができ、数時間以内にサポートチームがすべてをクリアします。