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

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.

Viz také