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

概要

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

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

JavaのAspose.Fontは、フォントロードに要求される2つの重要なパラメーターを通知するために、オブジェクト fontdefinitonを与えます。

fontdefinitonオブジェクトを作成して開始した後、staticメソッド com.aspose.font.font.open()を呼び出し、初期化されたオブジェクトfontdefinitonをパラメーターとして渡す必要があります。

擬似コードで説明しましょう。

1 
2    パッケージcom.aspose.font;
3
4    import com.aspose.font.FontDefinition;
5    ...
6
7    // Initialize object FontDefinition with appropriate properties
8    FontDefinition fontDef = new FontDefinition(); 
9    Font desiredFont = Font.open(fontDef);

フォントロードの最終結果は、 com.aspose.font.fontタイプのオブジェクトを取得することです。 class com.aspose.font.fontは、Javaライブラリ用の com.aspose.fontパッケージのベースフォントクラスです。これは、フォントを使用する主な機能を表しています。

フォントを com.aspose.font.fontタイプオブジェクトにして、このフォントでテキストをレンダリングし、エンコードデータを取得し、フォントメトリックを取得できます。また、このフォントなどを変更または保存することもできます。

fontdefinitonオブジェクトを開始するには、前述のように、フォントバイナリデータのストレージを記述するフォーマットタイプとオブジェクトを2つのフォントパラメーターに与える必要があります。 最初のパラメーターは fonttype列挙で通知されます。

2番目のパラメーターで作業を簡素化するために、 com.aspose.fontは、フォントが配置されている場所から独立してフォントバイナリデータに普遍的にアクセスできる一連のオブジェクトを提供します。

このユニバーサルアクセスは、バイトストリームなどのものとリンクしています。 そのため、フォントが配置されている場所から独立して - ディスク上のファイル、別のファイル内、メモリ内のバイト配列 - いずれにせよ、特別な com.aspose.fontオブジェクトは、目的のフォントに関連するバイトストリームへのアクセスを提供します。

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

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

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

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

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

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

  1. フォントがlora.ttfという名前のファイルにあると仮定しましょう。この場合、このフォントのバイトストリームにアクセスするには、この単一のコンストラクターを使用して、 *ファイルSystemStystemStreamSource *のオブジェクトを作成する必要があります。
1 
2    FilesystemStreamSource fontsource = new FilesystemStymStreamSource( "lora.ttf");
  1. フォントバイナリデータがBYTE [] FONTARRAY変数によって定義されたバイナリ配列に配置されている場合、[byteContentsStreamSource]タイプ *のオブジェクトは、フォンタレイ変数に基づいてフォントデータストリームへのアクセスを提供します。

フォントバイトストリームへのアクセスを取得するには、このようなコードを使用してフォントバイト配列に関連して、型bytecontentsStreamSource *のオブジェクトを作成する必要があります。

1 
2    byteContentsStreamSource fontsource = new byteContentsStreamSource(fontarray);

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

FontFileDefinitionオブジェクト

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

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

このオブジェクトの最も単純で使用されているコンストラクターの1つは、次の署名を持つコンストラクターです。

これは、ファイルC:\Windows\Fonts\Montserrat.ttfにあるフォントmontserratのこのようなオブジェクトを開始する例です。

1 
2    fontfileDefinition filedef = new fontFileDefinition(new File( "C:\\Windows\\Fonts\\Montserrat.ttf"));

また、 fontFileDefinitionは、次のコンストラクターを使用して「Montserrat`フォントを参照できます。

1 
2    fontfileDefinition filedef = new fontFileDefinition(new FilesSystemStreamStreamSource( "C:\\Windows\\Fonts\\Montserrat.ttf"));
3
4    FontFileDefinition fileDef = new FontFileDefinition("ttf", new FileSystemStreamSource("C:\\Windows\\Fonts\\Montserrat.ttf"));

パラメーター fileExtensionは、フォント形式の拡張機能の標準と一致する必要があります。たとえば、フォント形式がtrueTypeの場合、 fileExtensionパラメーターの値はTTFまたはTTCである可能性があります(フォントファイルがtrueTypeフォントのコレクションの場合)。 フォント形式が「埋め込まれたオープンタイプ」の場合、 fileExtensionパラメーターの値はEOTでなければなりません。

以下の表は、Aspose.Font 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 
2    fontFileDefinition(String fileExtensionStreamSource StreamSourceロングオフセット)

fontdefinitionオブジェクトを開始する方法は?

さて、 StreamSourceクラスから継承されたオブジェクトのアイデアがあり、フォントバイトストリームへのアクセスを提供し、 fontFileDefinitionオブジェクトのアクセスを提供すると、これらのオブジェクトを使用して異なる状況を適切に開始する方法を説明します。

fontdefinitonオブジェクトは、多くのオーバーロードされたコンストラクターを提供します。 既存のすべてのコンストラクターの共通の特徴は、 fonttypeパラメーターです。フォント形式のタイプを説明します。 前述のように、 fonttype値とは別に、Object fontdefinitonは、フォントバイナリデータを参照して初期化する必要があります。

この場合、 fontdefinitonコンストラクターの次のパラメーターを使用できます。

質問があるかもしれません。パラメーター fontdefinitonまたは fontfiledefinitionオブジェクトにパラメーター fileExtensionを渡すのはなぜですか。常に filextensionとの値と一致するように見えるパラメーター fonttypeを渡すのですか? 問題は、 fonttypefileExtensionの値と常に一致しないことです。 fonttype特定のファイルのフォント形式ではなく、一般的なフォント形式を定義します。 1つの形式の一部のフォントには、異なるファイル形式があります。 たとえば、値fonttype.ttfはtrueType形式を定義します。ただし、同時にtrueTypeにはいくつかのフォント形式が含まれており、拡張機能TTFEOTTTCなどのフォントファイルがあります。たとえば、EOT形式のフォントの場合、 fontdefinitonのみに渡された場合、このオブジェクトは、フォントが「eot形式に属し、TTFではなくEOT`形式に属していることをどのように理解しますか?

同様に、fonttype.type1の値は、この形式のフォントの一般的な定義です。同時に、 type1フォントフォントファイルには拡張機能 .pfa.pfb .afm.pfmがあります。そのため、FonType.type1値のみに適切に依存して、フォントファイル形式を定義することはできません。したがって、フォント形式を正しく定義するには、 fileExtensionパラメーターの値でパラメーター fonttypeを指定する必要があります。

以下では、 fontdefinitonオブジェクトの初期化の例と、さまざまなケースのフォント読み込みの例をご覧ください。

すべての場合において、最終的なフォントロード結果が com.aspose.font.fontタイプの変数に配置されます。このタイプは com.aspose.fontの基本的なフォントクラスであり、このタイプのオブジェクトは、フォントで動作するための共通のベース機能を提供します。

このオブジェクトにフォントをロードすると、このフォントでテキストをレンダリングし、コーディング情報、フォントメトリックなどを取得できます。

フォントをロードする方法の例

例として、ファイルMontserrat-Regular.ttfからフォントmontserratをロードしてみましょう。

次のステートメントを使用してください。

 1    パッケージcom.aspose.font;
 2
 3    import java.io.File;
 4    import java.io.IOException;
 5    import java.nio.file.Files;
 6    import java.nio.file.Paths;
 7
 8    import com.aspose.font.ByteContentStreamSource;
 9    import com.aspose.font.FileSystemStreamSource;
10    import com.aspose.font.Font;
11    import com.aspose.font.FontDefinition;
12    import com.aspose.font.FontFileDefinition;
13    import com.aspose.font.FontType;

このフォントは、 fontdefinitonおよび fontFileDefinitionオブジェクトをいくつかの異なる方法でロードできます。

java.io.fileオブジェクトの助けを借りてロードします

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

  1. ファイルへのパスを構築します。
  2. fontdefinitonfonttype* valueとして ttfを渡すオブジェクトを開始します。
  3. 自動的に計算された値 fileExtensionを取得します。
  4. フォントをロードします。
 1    //ファイルへのパスを構築します
 2    string fontpath = paths.get(getDatadir() "Montserrat-Regular.ttf")toString();
 3
 4    // Initialize FontDefinition object passing TTF as FontType value and using FontFileDefinition
 5    FontFileDefinition fileDef = new FontFileDefinition(new File(fontPath));
 6
 7    // Based on FileInfo object, fileExtension value is calculated automatically from FileInfo fields.
 8    FontDefinition fontDef = new FontDefinition(FontType.TTF, fileDef);
 9
10    // Load the font 
11    Font font = Font.open(fontDef);

ファイルSystemStreamSourceタイプオブジェクトのヘルプを使用してロードします

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

  1. ファイルへのパスを構築します。
  2. fontdefinitonオブジェクトを開始します。
  3. fileExtensionTTFに設定します。
  4. フォントをロードします。
 1    //ファイルへのパスを構築します
 2    string fontpath = paths.get(getDatadir() "Montserrat-Regular.ttf")toString();
 3
 4    // Initialize FontDefinition object passing TTF as FontType value and using FontFileDefinition
 5    FontFileDefinition fileDef = new FontFileDefinition("ttf", new FileSystemStreamSource(fontPath));
 6
 7    // Based on FileSystemStreamSource object, set fileExtension to "ttf"
 8    FontDefinition fontDef = new FontDefinition(FontType.TTF, fileDef);
 9
10    // Load the font
11    Font font = Font.open(fontDef);

FONTFILEDEFINITIONオブジェクトなしのフォントロード、FilesSystemStreamSourceを直接fontDefinitionに直接通過させます

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

  1. ファイルへのパスを構築します。
  2. fontdefiniton as fonttype value、 ttf as fileExtension value and filessystemstreamsource objectをas fonttype valueとして渡すオブジェクトを開始します。パラメーター fileExtensionここでは、パラメーター fonttypeの重複値ではありません。
  3. フォントをロードします。
 1    //ファイルへのパスを構築します
 2    string fontpath = paths.get(getDatadir() "Montserrat-Regular.ttf")toString();
 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    FontDefinition fontDef = new FontDefinition(FontType.TTF, "ttf", new FileSystemStreamSource(fontPath));
 8
 9    // Load the font
10    Font font = Font.open(fontDef);

バイト[]タイプ変数を使用して、bytecontentsStreamSourceタイプオブジェクトを使用してフォントロード

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

  1. ファイルへのパスを構築します。
  2. フォントバイナリデータをバイト配列にロードします3.fontdefinitonfonttype* value、 ttf as fileExtension value、および byteContentsStreamSource fontbytesアレイに基づいて fonttype valueを渡すオブジェクトをfiritionized fonttype value、as fileExtension bulestreamSource *。
  3. フォントをロードします。
 1    //ファイルへのパスを構築します
 2    string fontpath = paths.get(getDatadir() "Montserrat-Regular.ttf")toString();
 3
 4    // Load font binary data into byte array
 5    byte[] fontBytes = Files.readAllBytes(Paths.get(fontPath));
 6
 7    // Initialize FontDefinition object  passing TTF as FontType value, "ttf" as fileExtension value, 
 8    // and ByteContentStreamSource object based on fontBytes array
 9    FontDefinition fontDef = new FontDefinition(FontType.TTF, "ttf", new ByteContentStreamSource(fontBytes));
10
11    // Load the font
12    Font font = Font.open(fontDef);

Aspose.fontを使用する例を取得するには、 Java-Examplesaspose.font.examples.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.