В предыдущем посте вы видели, как загружать и работать со шрифтами CFF, TrueType, OpenType и Type1 изнутри. ваши приложения на С++. Эта статья делает еще один шаг вперед, демонстрируя, как программно определять латинские символы в шрифте с помощью C++. После обнаружения вы можете решить, поддерживает ли шрифт латинские символы или нет.
- C++ API для обнаружения латинских символов в шрифтах
- Обнаружение латинских символов в шрифтах TrueType с помощью C++
- Обнаружение латинских символов в шрифтах Type1 с использованием C++
C++ API для обнаружения латинских символов в шрифтах
Aspose.Font for C++ — это API для работы со шрифтами и управления ими, который позволяет довольно легко обнаруживать поддержку латинских символов в шрифтах. Вы можете либо скачать API, либо установить его через NuGet.
PM> Install-Package Aspose.Font.Cpp
Обнаружение латинских символов в шрифтах TrueType в C++
Определить поддержку латинских символов с помощью Aspose.Font для C++ проще простого. Ниже приведены шаги, чтобы проверить, поддерживает ли конкретный шрифт TrueType латинские символы или нет.
- Создайте объект класса FontDefinition для загрузки шрифта, указав его тип как TrueType.
- Создайте объект класса TtfFont для доступа к информации о шрифте.
- Переберите возможные коды и декодируйте их в идентификаторы глифов.
- Сопоставьте идентификаторы глифов, чтобы проверить, поддерживаются ли латинские символы в исходном шрифте TrueType или нет.
В следующем примере кода показано, как определить латинские символы в шрифтах TrueType с помощью C++.
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()));
}
Обнаружение латинских символов в шрифтах Type1 в C++
Процесс обнаружения латинских символов в шрифтах Type1 такой же, как и для шрифтов TrueType. Единственное отличие заключается в использовании класса Type1Font. Следующие шаги демонстрируют полный процесс обнаружения латинских символов в шрифтах Type1.
- Используйте класс FontDefinition для загрузки шрифта, указав его тип как Type1.
- Используйте класс Type1Font для доступа к информации о шрифте.
- Переберите возможные коды и декодируйте их в идентификаторы глифов.
- Сопоставьте идентификаторы глифов, чтобы проверить поддержку латинских символов в предоставленном шрифте Type1.
В следующем примере кода показано, как обнаружить латинские символы в шрифте Type1 с помощью C++.
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()));
}
Вывод
В этой статье вы узнали, как обнаруживать латинские символы в шрифтах TrueType и Type1 с помощью C++. Примеры кода в этой статье позволяют определить, поддерживаются ли латинские символы определенным шрифтом или нет. Вы можете узнать больше об API управления шрифтами C++, используя документацию.