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