Betűtípus információk olvasása

Fedezze fel a betűtípus metrikákat az Aspose.Font API megoldással C++-hoz. Tanulja meg a részletes betekintést minden vonalra, ívre és árnyalatra. Megoldásunk lehetővé teszi, hogy egyszerűen dolgozzon glifpekkel, és kinyerje a bármely betűtípus egyedi jellemzőiről szóló információkat.

 

Merüljön el egy világba, ahol a betűtípusok számtalan lehetőséget kínálnak az Aspose.Font API megoldással C++-hoz, amely erőteljes funkciókészlettel rendelkezik, beleértve a betűtípus-konvertálást, glifkezelést, latin szimbólumok felismerését és még sok mást. API-unk lehetővé teszi, hogy glifpekkel dolgozzon, és információkat nyerjen a betűtípusban szereplő glifpekről. Emelje fel tervezéseit, gyorsítsa fel projektjeit, és szabadítsa fel a glifpek teljes potenciálját az Aspose.Font C++-hoz. Ne várjon, és szerezzen ingyenes próbaidőt!

A glif egy egyedi tervezésű karakter vagy szimbólum egy betűtípusban. Ennek a betűtípus-egységnek a jobb megértéséhez olvassa el a Bevezetés a glifbe cikket. A betűtípus metrikák olyan mérőszámok és specifikációk, amelyek a betűtípus vizuális megjelenését írják le. Ezek a metrikák tartalmazhatnak információkat, például a karakterek magasságáról, szélességéről, a karakterek közti távolságról és a baseline helyzetéről, többek között. Lehetővé teszik a tervezők és a fejlesztők számára, hogy pontosan megjósolják a szöveg elrendezését digitális dokumentumokban és felhasználói felületeken.

Ez az oldal bemutatja, hogyan lehet lekérni különböző betűtípus metrikákat, mint például a glifpek száma, a betűmagasság, az „A” glif szélessége stb. A glifpekkel kapcsolatos teljes funkcionalitás részletesen le van írva a Glifobjektumok használata cikkben. A kódpélda tartalmaz egy részt a betűtípus metaadatok lekéréséről, beleértve a betűtípus nevét. Ez a funkció integrálható webalkalmazásokba, például a Betűtípus metaadatok alkalmazásba, amely az Aspose ökoszisztémában érhető el. Ha teljes példákat és adatfájlokat szeretne, látogasson el az Aspose GitHub projektre .

A betűtípus metrikák lekéréséhez szükségünk van:

  • Aspose.Font for C++ API, amely egy funkciógazdag, erőteljes és könnyen használható dokumentumkezelő és konvertáló API.

  • Nyissa meg a NuGet csomagkezelőt, és keresse meg az Aspose.Font-ot, majd telepítse. A csomagkezelő konzolból az alábbi parancsot is használhatja.

Package Manager Console Command


    PM> Install-Package Aspose.Font

Lépések a betűtípus metrikák eléréséhez C++-ban:

  1. Információk kinyerése egy betűtípusról a TtfFont osztály példányosításával.
  2. A betűtípus nevének kiírása a FontName tulajdonsággal.
  3. A betűtípus glifjeinek számának kiírása a NumGlyphs tulajdonsággal. A betűtípus metrikák, például az ascender, descender, typo ascender, typo descender és a UnitsPerEm is kiírásra kerülnek.
  4. A kód ezután lekéri a cmap Unicode kódolási táblát a betűtípusból, amely a karakterkódok glif indexekhez való leképezésére szolgál. Ellenőrzi, hogy a betűtípus rendelkezik‑e mind a cmap, mind a glyf táblával, amely a glifpekhez való hozzáférést biztosítja. Ha mindkét tábla jelen van, a glyf indexet lekéri a A karakterhez, majd megkapja az A szimbólum glifjét.
  5. A A glif körülhatároló dobozának és szélességének kiírása.

C++ kód a betűtípus glifjeinek információinak lekéréséhez

    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)));
            }
        }
    }