フォントをロードする方法は? | C ++のAPIソリューション

概要

質問、フォントのロード方法に答えるには、最初に、フォントは物理的にデータが何らかの形式で表されるバイトの配列であることを学ぶ必要があります。 したがって、正しいフォントの読み込みをするには、2つの重要なパラメーターを知る必要があります。

フォントロードに必要なオブジェクトとパラメーター

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オブジェクトは、目的のフォントに関連するバイトストリームへのアクセスを提供します。

これらのオブジェクトを説明しましょう。

  1. StreamSourceクラス。 この抽象的なベースクラスは、フォントバイトストリームにアクセスできるプロパティとメソッドを定義します。 getFontStream()このクラスの方法は、バイナリフォントデータに関連するストリームを返します。 プロパティ offsetは、このストリームの位置でポイントで、そこからデータの読み取りを開始する必要があります。

  2. ベース StreamSourceから継承された2つの最も使用されているクラス:

    • filesystemStreamSource - ファイルシステムに基づいて、ストリームへのアクセスを提供するように設計されています。 プロパティ filenameフォントファイルの名前を返します。 getFontStream()メソッドは、このファイルに関連するバイトストリームを返します。
    • byteContentsStreamSource - バイト配列に基づいて、ストリームへのアクセスを提供します。

クラスを開始する方法は?

これらのクラスの開始の例を次に示します。

  1. フォントがlora.ttfという名前のファイルにあると仮定しましょう。この場合、このフォントのバイトストリームにアクセスするには、この単一のコンストラクターを使用して filesystemStymStreamSourceのオブジェクトを作成する必要があります。
1    System::SharedPtr<FileSystemStreamSource> fontSource = System::MakeObject<FileSystemStreamSource>("Lora.ttf");
  1. フォントバイナリデータがBYTE [] fontArray変数によって定義されたバイナリ配列に配置されている場合、 byteContentsStreamSourceのオブジェクトは、フォントレイ変数に基づいてフォントデータストリームへのアクセスを提供します。 フォントバイトストリームにアクセスするには、 byteContentsStreamSourceのオブジェクトを作成して、このようなコードを使用してフォントバイト配列に関連するストリームにアクセスする必要があります。
1    System::SharedPtr<ByteContentStreamSource> fontSource = System::MakeObject<ByteContentStreamSource>(fontArray);

したがって、フォントバイナリデータへのアクセスを提供するには、ベース StreamSourceクラスから継承されたオブジェクトを使用します。さらに、そのようなオブジェクトを呼び出しますフォントストリームソース

FontFileDefinitionオブジェクト

ほとんどのフロントは通常のファイルにありますが、同時に、フォントの一部に異なるデータソースがある場合があります。 1つのオブジェクト用語に結合するファイルおよびフォントバイナリストリームaspose.fontライブラリは特別なオブジェクトを提供します fontfiledefinition

このオブジェクトにはそのようなプロパティがあります。

このオブジェクトの最も単純で最も使用されているコンストラクターの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 fontttf
TrueType font collectionttc
Web Open Font Formatwoff
Web Open Font Format version 2.0woff2
Embedded OpenTypeeot
Adobe Type 1 fontpfa, pfb, afm, pfm
Compact Font Formatcff, 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コンストラクターの次のパラメーターを使用できます。

質問があるかもしれません。パラメーター fileExtension(52)(52)または fontfileDefinitionオブジェクトにパラメーターを渡すのはなぜですか? 問題は、 fonttypefileextensionの値と必ずしも一致しないことです。 fonttype特定のファイルのフォント形式ではなく、一般的なフォント形式を定義します。 1つの形式の一部のフォントには、異なるファイル形式があります。

たとえば、値fonttype.ttfはtrueType形式を定義します。ただし、同時にtrueTypeにはいくつかのフォント形式が含まれており、拡張機能TTFEOTTTCなどのフォントファイルがあります。たとえば、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 オブジェクトを利用して読み込む

負荷を満たすには、次を実行します。

  1. ファイルへのパスを構築します。
  2. fontdefinitonを開始します。 fonttype値として ttfを渡します。
  3. 自動的に計算された値 fileExtensionを取得します。
  4. フォントをロードします。
 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タイプオブジェクトのヘルプを使用してロードします

次の手順を実行して、手術を実現します。

  1. ファイルへのパスを構築します。
  2. fontdefinitonオブジェクトを開始します。
  3. fileExtensionTTFに設定します。
  4. フォントをロードします。
 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に直接通過させます

この方法でフォントをロードするには、次のアクションを実行する必要があります。

  1. ファイルへのパスを構築します。
  2. fontdefinitonを開始するオブジェクトは fonttype値として ttfを渡します。パラメーター fileExtensionここには、パラメーター fonttypeの重複値ではありません。
  3. フォントをロードします。
 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タイプオブジェクトを使用してフォントロード

バイト配列からフォントをロードするには、次のことが必要です。

  1. ファイルへのパスを構築します。
  2. フォントバイナリデータをバイト配列にロードします
  3. fontdefinitonオブジェクトを fonttype値として渡すオブジェクト、 fileextension値として ttfを渡します。
  4. フォントをロードします。
 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 documentationcpp-examplesaspose.font.examples.cpp.sln solutionに移動します。

問題や質問が残っている場合は、 aspose.font.product family free support forumのセクションに投稿することができ、数時間以内にサポートチームがすべてをクリアします。

Have any questions about Aspose.Font?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.