Чтение информации о шрифте

Изучайте метрики шрифтов с помощью Aspose.Font API Solution для C++. Узнайте подробные сведения о каждом штрихе, кривой и нюансе. Наше решение позволяет легко работать с глифами, извлекая информацию об уникальных характеристиках любого шрифта.

 

Погрузитесь в мир возможностей шрифтов с Aspose.Font API Solution для C++, который предоставляет набор мощных функций, включая конвертацию шрифтов, манипуляцию глифами, обнаружение латинских символов и многое другое. Наш API также позволяет работать с глифами и получать информацию о глифах, включенных в шрифт. Поднимите свои дизайны, ускорьте проекты и раскройте весь потенциал глифов с Aspose.Font для C++. Не ждите — начните бесплатный пробный период!

Глиф — это уникальный дизайн символа или знака в наборе шрифтов. Чтобы лучше понять этот элемент шрифта, прочитайте статью Введение в глиф . Метрики шрифта — это измерения и спецификации, используемые для описания визуального вида шрифта. Эти метрики могут включать информацию, такую как высота символов, ширина символов, интервал между символами и положение базовой линии и др. Они позволяют дизайнерам и разработчикам точно предсказывать расположение текста в цифровых документах и пользовательских интерфейсах.

На этой странице объясняется, как получить различные метрики шрифта, такие как количество глифов, высота букв, ширина глифа ‘A’ и т.д. Однако полная функциональность работы с глифами подробно описана в статье Объекты глифов. Пример кода включает раздел получения метаданных шрифта, включая имя шрифта. Такой тип функциональности может быть интегрирован в веб‑приложения, например приложение Метаданные шрифта в экосистеме Aspose. Если хотите изучить полные примеры и файлы данных, посетите проект Aspose Github .

Для получения метрик шрифта нам требуется:

  • Aspose.Font для C++ API — богатый функциями, мощный и простой в использовании API для манипуляции и конвертации документов.

  • Откройте менеджер пакетов NuGet, найдите Aspose.Font и установите. Также можно использовать следующую команду в консоли диспетчера пакетов.

Package Manager Console Command


    PM> Install-Package Aspose.Font

Шаги для получения метрик шрифта с помощью C++:

  1. Извлеките информацию о шрифте, создав экземпляр класса TtfFont .
  2. Выведите имя шрифта, используя свойство FontName.
  3. Выведите количество глифов в шрифте, используя свойство NumGlyphs. Метрики шрифта, такие как ascender, descender, typo ascender, typo descender и UnitsPerEm, также выводятся.
  4. Код затем получает таблицу кодирования Unicode cmap из шрифта, которая используется для сопоставления кодов символов с индексами глифов. Он проверяет наличие таблиц cmap и glyf, которые позволяют получить доступ к глифам. Если обе таблицы присутствуют, код извлекает индекс glyf для символа A и затем получает глиф символа A.
  5. Выведите ограничивающий прямоугольник глифа A и его ширину.

C++ код для получения информации о глифах шрифта

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