フォントの操作とパフォーマンスの問題

使用可能なフォント操作メカニズムはすべてFontSettingsクラスに含まれています。 このクラスは、以下で説明するように、定義されたフォントソース内のフォントの取得と、フォント置換プロセスを担当します。

解決されたフォントの解析

フォントはいくつかのステップで解析されます:

  1. 利用可能なすべてのフォントから解決し、フォントの情報を取得します。
  2. 解決されたフォントを解析して、利用可能なグリフとメトリック(水平および垂直)を取得します。
  3. 埋め込みとサブセットのために解決されたフォントを解析します。

Aspose.Wordsは、文書内で初めてフォントを検出すると、各フォントソースにあるフォントファイルから、フォントのフルネーム、ファミリ名、バージョン、スタイルなどの基本的なフォント情報を取得しようとします。 すべてのフォントが取得された後、Aspose.Wordsはこれらの詳細を使用して、必要なフォントデータまたは要求されたフォントの適切な置換を検索します。

フォントを置き換えるときのパフォーマンスの問題

上記の手順は時間がかかるため、最初の起動時のアプリケーションのパフォーマンスに悪影響を与える可能性があります。 ただし、FontSettingsの各インスタンスには独自のキャッシュがあり、後続のドキュメントの処理時間を短縮することができます。 たとえば、異なるドキュメント間でFontSettingsクラスのインスタンスを共有することができ、ドキュメントの読み込みを高速化できます。 次の例は、これを示しています:

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
System::SharedPtr<FontSettings> fontSettings = System::MakeObject<FontSettings>();
System::SharedPtr<TableSubstitutionRule> substitutionRule = fontSettings->get_SubstitutionSettings()->get_TableSubstitution();
// If "UnknownFont1" font family is not available then substitute it by "Comic Sans MS".
substitutionRule->AddSubstitutes(u"UnknownFont1", System::MakeArray<System::String>({ u"Comic Sans MS" }));
System::SharedPtr<LoadOptions> lo = System::MakeObject<LoadOptions>();
lo->set_FontSettings(fontSettings);
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"MyDocument.docx", lo);

FontSettingsが明示的に定義されていない場合、Aspose.WordsはデフォルトのFontSettingsインスタンスを使用します。 このインスタンスは、ドキュメント間でも自動的に共有され、次のように抽出できます:

C++

System::SharedPtr<FontSettings> fontSettings = System::MakeObject<FontSettings>()->get_DefaultInstance();

デフォルトのFontSettingsインスタンスの使用

すべての処理文書が同じフォント設定を必要とすることが確実な場合は、デフォルトのFontSettingsインスタンスを設定して利用することをお勧めします。 すべてのドキュメントに同じフォントソースを使用する必要があるとします。 この場合、次のようにデフォルトのインスタンスを修正できます:

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
System::SharedPtr<FontSettings> fontSettings = System::MakeObject<FontSettings>()->get_DefaultInstance();
fontSettings->SetFontsSources(System::MakeArray<System::SharedPtr<FontSourceBase>>(
{
System::MakeObject<SystemFontSource>(),
System::MakeObject<FolderFontSource>(u"/home/user/MyFonts", true)
}));