Читання інформації про шрифт
Досліджуйте метрики шрифту за допомогою Aspose.Font API Solution для C++. Дізнайтеся докладні дані про кожен штрих, криву та нюанс. Наше рішення дозволяє без зусиль працювати з гліфами, отримуючи інформацію про унікальні характеристики будь-якого шрифту.
Зануртесь у світ можливостей шрифтів з Aspose.Font API Solution для C++, який пропонує вам набір потужних функцій, включаючи конвертацію шрифтів, маніпуляції гліфами, виявлення латинських символів та інше. Наш API також дає змогу працювати з гліфами та отримувати інформацію про гліфи, включені до шрифту. Підніміть ваші дизайни, підсиліть проєкти та розкрийте повний потенціал гліфів з Aspose.Font для C++. Не чекайте — отримайте безкоштовний пробний період!
Гліф — це унікальний дизайн символу або знака у шрифті. Щоб краще зрозуміти цей одиницю шрифту, прочитайте статтю Вступ до гліфу . Метрики шрифту — це вимірювання та специфікації, що описують візуальний вигляд типографічного шрифту. Ці метрики можуть включати інформацію, таку як висота символів, ширина символів, інтервали між символами та розташування базової лінії, серед іншого. Вони дозволяють дизайнерам і розробникам точно передбачати розташування тексту у цифрових документах та інтерфейсах користувача.
Ця сторінка пояснює, як отримати різні метрики шрифту, такі як кількість гліфів, висота літери, ширина гліфа ‘A’ тощо. Однак повний функціонал роботи з гліфами детально описаний у статті про використання об’єктів гліфів. Приклад коду включає розділ про отримання метаданих шрифту, включаючи назву шрифту. Така функціональність може бути інтегрована у веб‑застосунки, наприклад у застосунок Метадані шрифту , доступний в екосистемі Aspose. Якщо ви хочете ознайомитися з повними прикладами та файлами даних, перейдіть до Aspose Github Project .
Для отримання метрик шрифту нам потрібне:
Aspose.Font for C++ API — це багатофункціональний, потужний та простий у використанні API для маніпулювання та конвертації документів.
Відкрийте менеджер пакетів NuGet і виконайте пошук Aspose.Font та встановіть його. Ви також можете скористатися наступною командою у консолі менеджера пакетів.
Package Manager Console Command
PM> Install-Package Aspose.Font
Кроки для отримання метрик шрифту за допомогою C++:
- Отримайте інформацію про шрифт, створивши екземпляр класу TtfFont .
- Виведіть назву шрифту, використовуючи властивість FontName.
- Виведіть кількість гліфів у шрифті, використовуючи властивість NumGlyphs. Метрики шрифту, такі як ascender, descender, typo ascender, typo descender та UnitsPerEm, також виводяться.
- Код потім отримує таблицю кодування
cmapUnicode зі шрифту, яка використовується для зіставлення кодів символів з індексами гліфів. Перевіряється, чи має шрифт як таблицюcmap, так і таблицюglyf, яка використовується для доступу до гліфів. Якщо обидві таблиці присутні, код отримує індексglyfдля символуA, а потім отримує гліф для символуA. - Виведіть обмежувальну рамку гліфа
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)));
}
}
}