Lire les informations de police

Explorez les métriques de police avec Aspose.Font API Solution pour C++. Découvrez des informations détaillées sur chaque trait, courbe et nuance. Notre solution vous permet de travailler facilement avec les glyphes, vous permettant d’extraire des informations sur les caractéristiques uniques de toute police.

 

Plongez dans un monde de possibilités de police avec Aspose.Font API Solution pour C++ qui vous offre une boîte à outils puissante, incluant les conversions de police, la manipulation de glyphes, la détection de symboles latins, et plus encore. Notre API vous permet également de travailler avec les glyphes et d'obtenir des informations sur les glyphes inclus dans une police. Élevez vos conceptions, dynamisez vos projets, et libérez le plein potentiel des glyphes avec Aspose.Font pour C++. N'attendez plus et obtenez un essai gratuit!

Un glyphe est une conception unique pour un caractère ou un symbole dans une police. Pour mieux comprendre cette unité de police, lisez l’article Introduction to Glyph . Les métriques de police sont des mesures et spécifications utilisées pour décrire l’apparence visuelle d’une police. Ces métriques peuvent inclure des informations telles que la hauteur des caractères, la largeur des caractères, l’espacement entre les caractères, et la position de la ligne de base, entre autres. Elles permettent aux concepteurs et aux développeurs de logiciels de prédire avec précision la disposition du texte dans les documents numériques et les interfaces utilisateur.

Cette page explique comment récupérer différentes métriques de police telles que le nombre de glyphes, la hauteur de la lettre, la largeur du glyphe ‘A’, etc. Cependant, la fonctionnalité complète de travail avec les glyphes est décrite en détail dans l’article Utilisation des objets Glyphe. L’exemple de code comprend une section sur la récupération des métadonnées de police, y compris le nom de la police. Ce type de fonctionnalité peut être intégré dans des applications web, comme l’application Font Metadata disponible dans l’écosystème Aspose. Si vous souhaitez consulter des exemples complets et des fichiers de données, veuillez vous rendre sur le Github Project d’Aspose.

Pour obtenir les métriques de police, nous avons besoin de :

  • L'API Aspose.Font pour C++ qui est riche en fonctionnalités, puissante et facile à utiliser pour la manipulation et la conversion de documents.

  • Ouvrez le gestionnaire de packages NuGet, recherchez Aspose.Font et installez-le. Vous pouvez également utiliser la commande suivante depuis la console du Gestionnaire de packages.

Package Manager Console Command


    PM> Install-Package Aspose.Font

Étapes pour obtenir les métriques de police avec C++ :

  1. Extraire des informations sur une police en créant une instance de la classe TtfFont .
  2. Imprimer le nom de la police en utilisant la propriété FontName.
  3. Imprimer le nombre de glyphes dans la police en utilisant la propriété NumGlyphs. Les métriques de la police, telles que l’ascendant, le descendant, l’ascendant typographique, le descendant typographique et les UnitsPerEm sont également imprimées.
  4. Le code récupère ensuite la table d’encodage unicode cmap de la police, qui est utilisée pour mapper les codes de caractères aux indices de glyphes. Il vérifie si la police possède à la fois la table cmap et la table glyf, qui est utilisée pour accéder aux glyphes. Si les deux tables sont présentes, il récupère l’index glyf pour le caractère A puis obtient le glyphe du symbole A.
  5. Imprimer la boîte englobante du glyphe A et sa largeur.

Code C++ pour obtenir des informations sur les glyphes de la police

    using Aspose::Font;
    using Aspose::Font::Glyphs;
    using Aspose::Font::Ttf;
    //Font file name with the full path
    
    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);
    
    //Get cmap unicode encoding table from the font as object TtfCMapFormatBaseTable to access the information about the font glyph for symbol 'A'.
    //Also check that font has object TtfGlyfTable (table 'glyf') to access glyph.
    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 for 'A' symbol
        char16_t unicode = (char16_t)65;
    
        //Glyph index for 'A'
        uint32_t glIndex = cmapTable->GetGlyphIndex(unicode);
    
        if (glIndex != static_cast<uint32_t>(0))
        {
            //Glyph for 'A'
            System::SharedPtr<Glyph> glyph = font->GetGlyphById(glIndex);
            if (glyph != nullptr)
            {
                //Print glyph metrics
                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)));
            }
        }
    }