读取字体信息
使用适用于 C++ 的 Aspose.Font API 解决方案探索字体指标。 了解每个笔画、曲线和细微差别的详细见解。 我们的解决方案可让您轻松使用字形,使您能够提取有关任何字体的独特特征的信息。
使用适用于 C++ 的 Aspose.Font API 解决方案深入探索字体的世界,该解决方案为您提供了一套强大的功能,包括字体转换、字形操作、拉丁符号检测等。 我们的 API 还使您能够使用字形并获取有关字体中包含的字形的信息。 使用 Aspose.Font for C++ 提升您的设计、增强您的项目并释放字形的全部潜力。 不要等待并获得免费试用!
字形是字体中字符或符号的独特设计。要更好地理解此字体单元,请阅读 Glyph 简介 文章。字体规格是用于衡量和规格描述字体的视觉外观。这些指标可以包括字符高度、字符宽度、字符间距和基线位置等信息。它们使设计人员和软件开发人员能够准确预测数字文档和用户界面中文本的布局。
此页面解释了如何检索不同的字体规格,例如字形数量、字母高度、字形“A”的宽度等。但是,使用字形对象一文中详细描述了使用字形的全部功能。该代码示例包括有关检索字体元数据(包括字体名称)的部分。这种类型的功能可以集成到 Web 应用程序中,例如 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 属性打印字体中的字形数。还打印了字体规格,例如升序器、降序器、拼写错误升序器、拼写错误降序器和 UnitsPerEm。
- 然后代码从字体中检索
cmap
unicode 编码表,该表用于将字符代码映射到字形索引。它检查字体是否同时具有cmap
表和用于访问字形的glyf
表。如果两个表都存在,它会检索字符“A”的“glyf”索引,然后获取“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)));
}
}
}