V předchozím příspěvku jste viděli, jak načíst a pracovat s písmy CFF, TrueType, OpenType a Type1 zevnitř vaše aplikace C++. Tento článek vás posune o krok dále tím, že demonstruje, jak detekovat symboly latinky v písmu programově pomocí C++. Po detekci se můžete rozhodnout, zda písmo podporuje symboly latinky či nikoli.
- C++ API pro detekci latinských symbolů ve fontech
- Detekce latinských symbolů v písmech TrueType pomocí C++
- Detekce latinských symbolů ve písmech Type1 pomocí C++
C++ API pro detekci latinských symbolů ve fontech
Aspose.Font for C++ je rozhraní API pro manipulaci a správu písem, které umožňuje poměrně snadno zjistit podporu latinských symbolů v písmech. Rozhraní API si můžete buď stáhnout, nebo jej nainstalovat pomocí NuGet.
PM> Install-Package Aspose.Font.Cpp
Detekce latinských symbolů v písmech TrueType v C++
Detekce podpory latinských symbolů pomocí Aspose.Font for C++ je jednoduchá jako facka. Níže jsou uvedeny kroky, jak zkontrolovat, zda konkrétní písmo TrueType podporuje latinské symboly či nikoli.
- Vytvořte objekt třídy FontDefinition pro načtení písma zadáním jeho typu jako TrueType.
- Vytvořte objekt třídy TtfFont pro přístup k informacím o písmu.
- Projděte si možné kódy a dekódujte je na ID glyfů.
- Porovnejte ID glyfů a zkontrolujte, zda jsou ve zdrojovém písmu TrueType podporovány symboly latinky, či nikoli.
Následující ukázka kódu ukazuje, jak rozpoznat symboly latinky v písmech TrueType pomocí 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";
//Název souboru písma s úplnou cestou
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()));
}
Detekce latinských symbolů ve písmech Type1 v C++
Proces detekce latinských symbolů v písmech Type1 je stejný jako u písem TrueType. Jediným rozdílem je použití třídy Type1Font. Následující kroky ukazují úplný proces detekce symbolů latinky v písmech Type1.
- Pomocí třídy FontDefinition načtěte písmo zadáním jeho typu jako Type1.
- Pro přístup k informacím o písmu použijte třídu Type1Font.
- Projděte si možné kódy a dekódujte je na ID glyfů.
- Porovnejte ID glyfů a zkontrolujte podporu latinských symbolů v poskytnutém písmu Type1.
Následující ukázka kódu ukazuje, jak zjistit latinské symboly v písmu Type1 pomocí 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";
//Název souboru písma s úplnou cestou
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()));
}
Závěr
V tomto článku jste se naučili, jak detekovat latinské symboly ve fontech TrueType a Type1 pomocí C++. Ukázky kódu v tomto článku umožňují určit, zda jsou symboly latinky podporovány konkrétním písmem či nikoli. Další informace o rozhraní API pro manipulaci s písmy C++ se můžete dozvědět pomocí dokumentace.