前の投稿では、CFFTrueTypeOpenType、およびType1フォントを内部からロードして操作する方法を説明しました。 C++アプリケーション。この記事では、C++を使用してプログラムでフォント内のラテン記号を検出する方法を示すことにより、さらに一歩進んでいます。検出後、フォントがラテン記号をサポートするかどうかを決定できます。

フォント内のラテン記号を検出するためのC++API

Aspose.Font for C++は、フォント操作および管理APIであり、フォント内のラテン記号のサポートを非常に簡単に検出できます。 APIをダウンロードするか、NuGetからインストールできます。

PM> Install-Package Aspose.Font.Cpp

C++のTrueTypeフォントでラテン記号を検出する

Aspose.Font for C++を使用してラテン記号のサポートを検出するのは、パイのように簡単です。以下は、特定のTrueTypeフォントがラテン記号をサポートしているかどうかを確認する手順です。

  • FontDefinitionクラスのオブジェクトを作成し、そのタイプをTrueTypeとして指定してフォントをロードします。
  • TtfFontクラスのオブジェクトを作成して、フォントの情報にアクセスします。
  • 可能なコードをループして、それらをグリフIDにデコードします。
  • グリフIDを照合して、ラテン記号がソースTrueTypeフォントでサポートされているかどうかを確認します。

次のコードサンプルは、C++を使用してTrueTypeフォントのラテン記号を検出する方法を示しています。

For complete examples and data files, please go to https://github.com/aspose-font/Aspose.Font-for-C
System::String fileName = dataDir + u"Montserrat-Regular.ttf";
//フルパスのフォントファイル名
    
System::SharedPtr<FontDefinition> fd = System::MakeObject<FontDefinition>(Aspose::Font::FontType::TTF, System::MakeObject<FontFileDefinition>(u"ttf", System::MakeObject<FileSystemStreamSource>(fileName)));
System::SharedPtr<TtfFont> ttfFont = System::DynamicCast_noexcept<Aspose::Font::Ttf::TtfFont>(Aspose::Font::Font::Open(fd));
    
bool latinText = true;
    
    
for (uint32_t code = 65; code < static_cast<uint32_t>(123); code++)
{
    System::SharedPtr<GlyphId> gid = ttfFont->get_Encoding()->DecodeToGid(code);
    if (gid == nullptr || gid == System::StaticCast<System::Object>(GlyphUInt32Id::get_NotDefId()))
    {
        latinText = false;
    }
}
    
if (latinText)
{
    System::Console::WriteLine(System::String::Format(u"Font {0} supports latin symbols.", ttfFont->get_FontName()));
}
else
{
    System::Console::WriteLine(System::String::Format(u"Latin symbols are not supported by font {0}.", ttfFont->get_FontName()));
}

C++のType1フォントでラテン記号を検出する

Type1フォントでラテン記号を検出するプロセスは、TrueTypeフォントで行ったのと同じです。唯一の違いは、Type1Fontクラスの使用です。次の手順は、Type1フォントでのラテン記号検出の完全なプロセスを示しています。

  • FontDefinitionクラスを使用して、タイプをType1として指定してフォントをロードします。
  • Type1Fontクラスを使用して、フォントの情報にアクセスします。
  • 可能なコードをループして、それらをグリフIDにデコードします。
  • グリフIDを照合して、提供されているType1フォントのラテン記号のサポートを確認します。

次のコードサンプルは、C++を使用してType1フォントのラテン記号を検出する方法を示しています。

For complete examples and data files, please go to https://github.com/aspose-font/Aspose.Font-for-C
System::String fileName = dataDir + u"courier.pfb";
//フルパスのフォントファイル名
    
System::SharedPtr<FontDefinition> fd = System::MakeObject<FontDefinition>(Aspose::Font::FontType::Type1, System::MakeObject<FontFileDefinition>(u"pfb", System::MakeObject<FileSystemStreamSource>(fileName)));
System::SharedPtr<Type1Font> font = System::DynamicCast_noexcept<Aspose::Font::Type1::Type1Font>(Aspose::Font::Font::Open(fd));
    
bool latinText = true;
    
    
for (uint32_t code = 65; code < static_cast<uint32_t>(123); code++)
{
    System::SharedPtr<GlyphId> gid = font->get_Encoding()->DecodeToGid(code);
    if (gid == nullptr || gid == System::StaticCast<System::Object>(GlyphUInt32Id::get_NotDefId()))
    {
        latinText = false;
    }
}
    
if (latinText)
{
    System::Console::WriteLine(System::String::Format(u"Font {0} supports latin symbols.", font->get_FontName()));
}
else
{
    System::Console::WriteLine(System::String::Format(u"Latin symbols are not supported by font {0}.", font->get_FontName()));
}

結論

この記事では、C++を使用してTrueTypeおよびType1フォントのラテン記号を検出する方法を学習しました。この記事のコードサンプルでは、ラテン語の記号が特定のフォントでサポートされているかどうかを判断できます。 ドキュメントを使用して、C++フォント操作APIの詳細を学ぶことができます。

関連項目