Шрифти є невід’ємною частиною цифрових документів і веб-сторінок, які використовуються для визначення вигляду тексту. Файли шрифтів використовуються для зберігання інформації про шрифти, такої як стилі, вага, розмір тощо. Може виникнути випадок, коли вам знадобиться маніпулювати шрифтами, щоб отримати їхню інформацію. Для таких сценаріїв у цій статті ви дізнаєтеся, як завантажувати та читати інформацію зі шрифтів TrueType, CFF і Type1 за допомогою C++.

Бібліотека обробки шрифтів C++

Aspose.Font for C++ — це потужний API для обробки шрифтів, який дозволяє вам працювати з TrueType, CFF, OpenType і Type1 , EOT та багато інших шрифтів із ваших програм C++. Ви можете завантажувати, зберігати та отримувати інформацію про кодування зі шрифтів, а також працювати з гліфами. API можна завантажити з розділу завантаження або встановити через NuGet.

Завантажуйте шрифти CFF, TrueType і Type1 за допомогою C++

Aspose.Font for C++ дозволяє завантажувати шрифти CFF, TrueType і Type1 із файлів, розташованих на вашому носії. Нижче наведено кроки для завантаження шрифту.

  • Створіть об’єкт класу FontDefinition, щоб завантажити шрифт, вказавши його тип, наприклад TrueType, Type1 тощо.
  • Використовуйте клас CffFont, TtfFont або Type1Font, щоб відкрити шрифти CFF, TrueType і Type1 відповідно з об’єкта FontDefinition.

Завантажуйте шрифти CFF за допомогою C++

У наступному прикладі коду показано, як завантажити шрифти CFF за допомогою 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";
//Назва файлу шрифту з повним шляхом
    
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));

Завантажуйте шрифти TrueType за допомогою C++

У наведеному нижче прикладі коду показано, як завантажити шрифти TrueType за допомогою 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";
//Назва файлу шрифту з повним шляхом
    
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));

Завантажте шрифти Type1 за допомогою C++

У наступному прикладі коду показано, як завантажити шрифти Type1 за допомогою 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";
//Назва файлу шрифту з повним шляхом
    
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));

Витягніть показники шрифту з TrueType або Type1 за допомогою C++

Aspose.Font for C++ також дозволяє видобувати показники шрифту, які містять таку інформацію, як Ascender, Descender, TypoAscender, TypoDescender і UnitsPerEm. Нижче наведено кроки для отримання показників шрифту зі шрифту TrueType або Type1.

  • Створіть об’єкт класу FontDefinition для завантаження шрифту TrueType або Type1.
  • Відкрийте шрифт за допомогою класу TtfFont або Type1Font відповідно до типу шрифту.
  • Витягніть інформацію про метрику шрифту.

Отримайте показники шрифту зі шрифту TrueType за допомогою 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";
//Назва файлу шрифту з повним шляхом
    
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);
    
//Отримайте таблицю кодування cmap Unicode зі шрифту як об’єкт TtfCMapFormatBaseTable для доступу до інформації про гліф шрифту для символу «A».
//Також перевірте, чи має шрифт об’єкт TtfGlyfTable (таблиця 'glyf') для доступу до гліфа.
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());
    
    //Код для символу "А".
    char16_t unicode = (char16_t)65;
    
    //Індекс гліфа для «A»
    uint32_t glIndex = cmapTable->GetGlyphIndex(unicode);
    
    if (glIndex != static_cast<uint32_t>(0))
    {
        //Гліф для "А"
        System::SharedPtr<Glyph> glyph = font->GetGlyphById(glIndex);
        if (glyph != nullptr)
        {
            //Друкувати метрики гліфів
            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)));
        }
    }
}

Витягніть показники шрифту зі шрифту Type1 за допомогою 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";
//Назва файлу шрифту з повним шляхом
    
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);

Висновок

У цій статті ви дізналися, як завантажувати шрифти CFF, TrueType і Type1 і видобувати їхню інформацію за допомогою C++. Ви можете дізнатися більше про C++ Font Manipulation API за допомогою документації.