Dans le post précédent, vous avez vu comment charger et travailler avec les polices CFF, TrueType, OpenType et Type1 depuis l’intérieur vos applications C++. Cet article vous emmène un peu plus loin en montrant comment détecter les symboles latins dans une police par programmation à l’aide de C++. Après détection, vous pouvez décider si une police prend en charge les symboles latins ou non.

API C++ pour détecter les symboles latins dans les polices

Aspose.Font for C++ est une API de manipulation et de gestion des polices qui vous permet de détecter assez facilement la prise en charge des symboles latins dans les polices. Vous pouvez soit télécharger l’API ou l’installer via NuGet.

PM> Install-Package Aspose.Font.Cpp

Détecter les symboles latins dans les polices TrueType en C++

Détecter la prise en charge des symboles latins à l’aide de Aspose.Font for C++ est aussi simple qu’un gâteau. Voici les étapes pour vérifier si une police TrueType particulière prend en charge les symboles latins ou non.

  • Créez un objet de la classe FontDefinition pour charger la police en spécifiant son type en tant que TrueType.
  • Créez un objet de la classe TtfFont pour accéder aux informations de la police.
  • Parcourez les codes possibles et décodez-les en ID de glyphe.
  • Faites correspondre les ID de glyphe pour vérifier si les symboles latins sont pris en charge ou non dans la police TrueType source.

L’exemple de code suivant montre comment détecter les symboles latins dans les polices TrueType à l’aide de 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";
//Nom du fichier de police avec chemin complet
    
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()));
}

Détecter les symboles latins dans les polices Type1 en C++

Le processus de détection des symboles latins dans les polices Type1 est le même que celui que vous avez effectué pour les polices TrueType. La seule différence est l’utilisation de la classe Type1Font. Les étapes suivantes illustrent le processus complet de détection des symboles latins dans les polices Type1.

  • Utilisez la classe FontDefinition pour charger la police en spécifiant son type comme Type1.
  • Utilisez la classe Type1Font pour accéder aux informations de la police.
  • Parcourez les codes possibles et décodez-les en ID de glyphe.
  • Faites correspondre les ID de glyphe pour vérifier la prise en charge des symboles latins dans la police Type1 fournie.

L’exemple de code suivant montre comment détecter les symboles latins dans la police Type1 à l’aide de 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";
//Nom du fichier de police avec chemin complet
    
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()));
}

Conclusion

Dans cet article, vous avez appris à détecter les symboles latins dans les polices TrueType et Type1 à l’aide de C++. Les exemples de code de cet article vous permettent de déterminer si les symboles latins sont pris en charge par une police particulière ou non. Vous pouvez en savoir plus sur l’API de manipulation de polices C++ en utilisant documentation.

Voir également