フォントをロードする方法は? | JavaのAPIソリューション
概要
質問、フォントのロード方法に答えるには、最初に、フォントは物理的にデータが何らかの形式で表されるバイトの配列であることを学ぶ必要があります。 したがって、正しいフォントの読み込みをするには、2つの重要なパラメーターを知る必要があります。
- フォント形式。フォントには、
trueType
、Type1
などのような異なる形式を持つことができます。 - ストレージ。フォントを表すバイナリデータが保持されています。各フォントはバイナリデータとして表されますが、このデータの保存方法が異なる場合があります。ほとんどの場合、フォントはハードドライブのファイルとして保存されています。ただし、フォントバイナリデータは、フォント自体ではない別のファイルに配置できる場合があります。たとえば、Microsoft WordまたはAdobe Acrobatによって作成されたファイル。これらは、拡張機能
.docx
、.pdf
を持つファイルです。さまざまなフォントを含めることができます。
フォントロードに必要なオブジェクトとパラメーター
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オブジェクトは、目的のフォントに関連するバイトストリームへのアクセスを提供します。
これらのオブジェクトを説明しましょう。
StreamSourceクラス。この抽象的なベースクラスは、フォントバイトストリームにアクセスできるプロパティとメソッドを定義します。 getFontStream()このクラスの方法は、バイナリフォントデータに関連するストリームを返します。 プロパティ offsetは、このストリームの位置でポイントで、そこからデータの読み取りを開始する必要があります。
ベースから継承された2つの最も使用されているクラス StreamSource:
- filesystemStreamSource - ファイルシステムに基づいて、ストリームへのアクセスを提供するように設計されています。 プロパティ filenameフォントファイルの名前を返します。 getFontStream()メソッドは、このファイルに関連するバイトストリームを返します。
- byteContentsStreamSource - バイト配列に基づいて、ストリームへのアクセスを提供します。
クラスを開始する方法は?
これらのクラスの開始の例を次に示します。
- フォントがlora.ttfという名前のファイルにあると仮定しましょう。この場合、このフォントのバイトストリームにアクセスするには、この単一のコンストラクターを使用して、 *ファイルSystemStystemStreamSource *のオブジェクトを作成する必要があります。
1
2 FilesystemStreamSource fontsource = new FilesystemStymStreamSource( "lora.ttf");
- フォントバイナリデータがBYTE [] FONTARRAY変数によって定義されたバイナリ配列に配置されている場合、[byteContentsStreamSource]タイプ *のオブジェクトは、フォンタレイ変数に基づいてフォントデータストリームへのアクセスを提供します。
フォントバイトストリームへのアクセスを取得するには、このようなコードを使用してフォントバイト配列に関連して、型bytecontentsStreamSource *のオブジェクトを作成する必要があります。
1
2 byteContentsStreamSource fontsource = new byteContentsStreamSource(fontarray);
したがって、フォントバイナリデータへのアクセスを提供するには、ベース * StreamSource *クラスから継承されたオブジェクトを使用します。さらに、そのようなオブジェクトを呼び出しますフォントストリームソース。
FontFileDefinitionオブジェクト
ほとんどのフロントは通常のファイルにありますが、同時に、フォントの一部に異なるデータソースがある場合があります。 1つのオブジェクト用語に結合するファイルおよびフォントバイナリストリーム、 com.aspose.fontライブラリは特別なオブジェクトを提供します fontfiledefinition。
このオブジェクトにはそのようなプロパティがあります。
- filename - フォントファイルの名前。
- fileextension - フォントファイルの拡張。
- StreamSource - フォントストリームソース。
- offset - フォントバイトストリーム内のオフセット。
このオブジェクトの最も単純で使用されているコンストラクターの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 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
2 fontFileDefinition(String fileExtension、StreamSource StreamSource、ロングオフセット)。
fontdefinitionオブジェクトを開始する方法は?
さて、 StreamSourceクラスから継承されたオブジェクトのアイデアがあり、フォントバイトストリームへのアクセスを提供し、 fontFileDefinitionオブジェクトのアクセスを提供すると、これらのオブジェクトを使用して異なる状況を適切に開始する方法を説明します。
fontdefinitonオブジェクトは、多くのオーバーロードされたコンストラクターを提供します。 既存のすべてのコンストラクターの共通の特徴は、 fonttypeパラメーターです。フォント形式のタイプを説明します。 前述のように、 fonttype値とは別に、Object fontdefinitonは、フォントバイナリデータを参照して初期化する必要があります。
この場合、 fontdefinitonコンストラクターの次のパラメーターを使用できます。
- fontname;
- fileExtension;- StreamSourceタイプのオブジェクト。
- fontFileDefinitionタイプのオブジェクト。
質問があるかもしれません。パラメーター fontdefinitonまたは fontfiledefinitionオブジェクトにパラメーター fileExtensionを渡すのはなぜですか。常に filextensionとの値と一致するように見えるパラメーター fonttypeを渡すのですか?
問題は、 fonttypeが fileExtensionの値と常に一致しないことです。 fonttype特定のファイルのフォント形式ではなく、一般的なフォント形式を定義します。 1つの形式の一部のフォントには、異なるファイル形式があります。
たとえば、値fonttype.ttfはtrueType
形式を定義します。ただし、同時にtrueType
にはいくつかのフォント形式が含まれており、拡張機能TTF
、EOT
、TTC
などのフォントファイルがあります。たとえば、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オブジェクトの助けを借りてロードします
負荷を満たすには、次を実行します。
- ファイルへのパスを構築します。
- fontdefinitonfonttype* valueとして
ttf
を渡すオブジェクトを開始します。 - 自動的に計算された値 fileExtensionを取得します。
- フォントをロードします。
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タイプオブジェクトのヘルプを使用してロードします
次の手順を実行して、手術を実現します。
- ファイルへのパスを構築します。
- fontdefinitonオブジェクトを開始します。
- fileExtensionを
TTF
に設定します。 - フォントをロードします。
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に直接通過させます
この方法でフォントをロードするには、次のアクションを実行する必要があります。
- ファイルへのパスを構築します。
- fontdefiniton as fonttype value、
ttf
as fileExtension value and filessystemstreamsource objectをas fonttype valueとして渡すオブジェクトを開始します。パラメーター fileExtensionここでは、パラメーター fonttypeの重複値ではありません。 - フォントをロードします。
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タイプオブジェクトを使用してフォントロード
バイト配列からフォントをロードするには、次のことが必要です。
- ファイルへのパスを構築します。
- フォントバイナリデータをバイト配列にロードします3.fontdefinitonfonttype* value、
ttf
as fileExtension value、および byteContentsStreamSource fontbytesアレイに基づいて fonttype valueを渡すオブジェクトをfiritionized fonttype value、as fileExtension bulestreamSource *。 - フォントをロードします。
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-Examplesの aspose.font.examples.sln solutionにアクセスしてください。
問題や質問が残っている場合は、 aspose.font.product family free support forumのセクションに投稿できます。数時間以内に、サポートチームがすべてをクリアします。