Les polices font partie intégrante des documents numériques et des pages Web qui sont utilisées pour définir l’apparence du texte. Les fichiers de police sont utilisés pour stocker des informations sur les polices telles que les styles, le poids, la taille, etc. Il peut arriver que vous deviez manipuler des polices afin d’extraire leurs informations. Pour de tels scénarios, dans cet article, vous apprendrez à charger et à lire les informations des polices TrueType, CFF et Type1 à l’aide de C++.

Bibliothèque de manipulation de polices C++

Aspose.Font for C++ est une puissante API de manipulation de polices qui vous permet de travailler avec TrueType, CFF, OpenType et Type1 , EOT et de nombreuses autres polices depuis vos applications C++. Vous pouvez charger, enregistrer et extraire les informations de codage des polices ainsi que travailler avec des glyphes. L’API peut être téléchargée depuis la section téléchargements ou installée via NuGet.

Charger les polices CFF, TrueType et Type1 à l’aide de C++

Aspose.Font for C++ vous permet de charger les polices CFF, TrueType et Type1 à partir des fichiers situés sur votre support de stockage. Voici les étapes pour charger une police.

  • Créez un objet de la classe FontDefinition pour charger la police en spécifiant son type, c’est-à-dire TrueType, Type1, etc.
  • Utilisez la classe CffFont, TtfFont ou Type1Font pour ouvrir les polices CFF, TrueType et Type1 respectivement à partir de l’objet FontDefinition.

Charger les polices CFF à l’aide de C++

L’exemple de code suivant montre comment charger des polices CFF à 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"OpenSans-Regular.cff";
//Nom du fichier de police avec chemin complet
    
System::SharedPtr<FontDefinition> fd = System::MakeObject<FontDefinition>(Aspose::Font::FontType::CFF, System::MakeObject<FontFileDefinition>(u"cff", System::MakeObject<FileSystemStreamSource>(fileName)));
System::SharedPtr<CffFont> ttfFont = System::DynamicCast_noexcept<Aspose::Font::Cff::CffFont>(Aspose::Font::Font::Open(fd));

Charger les polices TrueType à l’aide de C++

L’exemple de code suivant montre comment charger des 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));

Charger les polices Type1 à l’aide de C++

L’exemple de code suivant montre comment charger des polices 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));

Extraire les métriques de police de TrueType ou Type1 à l’aide de C++

Aspose.Font for C++ vous permet également d’extraire les métriques de police qui contiennent des informations telles que Ascender, Descender, TypoAscender, TypoDescender et UnitsPerEm. Voici les étapes pour récupérer les métriques de police d’une police TrueType ou Type1.

  • Créez un objet de la classe FontDefinition pour charger la police TrueType ou Type1.
  • Ouvrez la police en utilisant la classe TtfFont ou Type1Font selon le type de police.
  • Extrayez les informations de métrique de la police.

Obtenir les métriques de police à partir de la police 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> font = System::DynamicCast_noexcept<Aspose::Font::Ttf::TtfFont>(Aspose::Font::Font::Open(fd));
    
System::String name = font->get_FontName();
System::Console::WriteLine(System::String(u"Font name: ") + name);
System::Console::WriteLine(System::String(u"Glyph count: ") + font->get_NumGlyphs());
System::String metrics = System::String::Format(u"Font metrics: ascender - {0}, descender - {1}, typo ascender = {2}, typo descender = {3}, UnitsPerEm = {4}", font->get_Metrics()->get_Ascender(), font->get_Metrics()->get_Descender(), font->get_Metrics()->get_TypoAscender(), font->get_Metrics()->get_TypoDescender(), font->get_Metrics()->get_UnitsPerEM());
    
System::Console::WriteLine(metrics);
    
//Obtenez la table d'encodage Unicode cmap de la police en tant qu'objet TtfCMapFormatBaseTable pour accéder aux informations sur le glyphe de police pour le symbole 'A'.
//Vérifiez également que la police a l'objet TtfGlyfTable (table 'glyf') pour accéder au glyphe.
System::SharedPtr<Aspose::Font::TtfCMapFormats::TtfCMapFormatBaseTable> cmapTable;
if (font->get_TtfTables()->get_CMapTable() != nullptr)
{
    cmapTable = font->get_TtfTables()->get_CMapTable()->FindUnicodeTable();
}
if (cmapTable != nullptr && font->get_TtfTables()->get_GlyfTable() != nullptr)
{
    System::Console::WriteLine(System::String(u"Font cmap unicode table: PlatformID = ") + cmapTable->get_PlatformId() + u", PlatformSpecificID = " + cmapTable->get_PlatformSpecificId());
    
    //Code pour le symbole 'A'
    char16_t unicode = (char16_t)65;
    
    //Index glyphe pour 'A'
    uint32_t glIndex = cmapTable->GetGlyphIndex(unicode);
    
    if (glIndex != static_cast<uint32_t>(0))
    {
        //Glyphe pour 'A'
        System::SharedPtr<Glyph> glyph = font->GetGlyphById(glIndex);
        if (glyph != nullptr)
        {
            //Imprimer les métriques de glyphe
            System::Console::WriteLine(u"Glyph metrics for 'A' symbol:");
            System::String bbox = System::String::Format(System::String(u"Glyph BBox: Xmin = {0}, Xmax = {1}") + u", Ymin = {2}, Ymax = {3}", glyph->get_GlyphBBox()->get_XMin(), glyph->get_GlyphBBox()->get_XMax(), glyph->get_GlyphBBox()->get_YMin(), glyph->get_GlyphBBox()->get_YMax());
            System::Console::WriteLine(bbox);
            System::Console::WriteLine(System::String(u"Width:") + font->get_Metrics()->GetGlyphWidth(System::MakeObject<GlyphUInt32Id>(glIndex)));
        }
    }
}

Extraire les métriques de police de 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));
    
System::String name = font->get_FontName();
System::Console::WriteLine(System::String(u"Font name: ") + name);
System::Console::WriteLine(System::String(u"Glyph count: ") + font->get_NumGlyphs());
System::String metrics = System::String::Format(u"Font metrics: ascender - {0}, descender - {1}, typo ascender = {2}, typo descender = {3}, UnitsPerEm = {4}", font->get_Metrics()->get_Ascender(), font->get_Metrics()->get_Descender(), font->get_Metrics()->get_TypoAscender(), font->get_Metrics()->get_TypoDescender(), font->get_Metrics()->get_UnitsPerEM());
    
System::Console::WriteLine(metrics);

Conclusion

Dans cet article, vous avez appris à charger des polices CFF, TrueType et Type1 et à extraire leurs informations à l’aide de C++. Vous pouvez en savoir plus sur l’API de manipulation de polices C++ à l’aide de la documentation.