Schriftinformationen lesen
Entdecken Sie Schriftmetriken mit der Aspose.Font API Solution für C++. Erfahren Sie detaillierte Einblicke zu jedem Strich, jeder Kurve und Nuance. Unsere Lösung ermöglicht Ihnen müheloses Arbeiten mit Glyphen, sodass Sie Informationen über die einzigartigen Eigenschaften jeder Schriftart extrahieren können.
Tauchen Sie ein in eine Welt voller Schriftmöglichkeiten mit der Aspose.Font API Solution für C++, die Ihnen ein Paket leistungsstarker Funktionen bietet, einschließlich Schriftkonvertierungen, Glyphen‑Manipulation, Erkennung lateinischer Symbole und mehr. Unsere API befähigt Sie außerdem, mit Glyphen zu arbeiten und Informationen über die in einer Schriftart enthaltenen Glyphen zu erhalten. Verbessern Sie Ihre Designs, beschleunigen Sie Ihre Projekte und nutzen Sie das volle Potenzial von Glyphen mit Aspose.Font für C++. Zögern Sie nicht und erhalten Sie eine kostenlose Testversion!
Ein Glyph ist ein einzigartiges Design für ein Zeichen oder Symbol in einer Schriftart. Um diese Schrifteinheit besser zu verstehen, lesen Sie den Einführung in Glyph Artikel. Schriftmetriken sind Messungen und Spezifikationen, die verwendet werden, um das visuelle Erscheinungsbild einer Schriftart zu beschreiben. Diese Metriken können Informationen wie die Höhe von Zeichen, die Breite von Zeichen, den Abstand zwischen Zeichen und die Position der Grundlinie umfassen, unter anderem. Sie ermöglichen Designern und Softwareentwicklern, das Layout von Text in digitalen Dokumenten und Benutzeroberflächen genau vorherzusagen.
Diese Seite erklärt, wie man verschiedene Schriftmetriken abruft, wie die Anzahl der Glyphen, die Buchstabenhöhe, die Breite des Glyphen ‘A’ usw. Die vollständige Funktionalität zur Arbeit mit Glyphen wird jedoch im Artikel über die Verwendung von Glyphenobjekten ausführlich beschrieben. Das Codebeispiel enthält einen Abschnitt zum Abrufen von Schriftmetadaten, einschließlich des Schriftartnamens. Diese Art von Funktionalität kann in Webanwendungen integriert werden, wie zum Beispiel in der Font Metadata App, die im Aspose‑Ökosystem verfügbar ist. Wenn Sie vollständige Beispiele und Datendateien kennenlernen möchten, gehen Sie bitte zu Aspose Github Project .
Um Schriftmetriken zu erhalten, benötigen wir:
Aspose.Font für C++ API, die eine funktionsreiche, leistungsstarke und einfach zu nutzende API für Dokumentenmanipulation und -konvertierung ist.
Öffnen Sie den NuGet‑Paket‑Manager, suchen Sie nach Aspose.Font und installieren Sie es. Sie können auch den folgenden Befehl in der Package Manager Console verwenden.
Package Manager Console Command
PM> Install-Package Aspose.Font
Schritte zum Abrufen von Schriftmetriken mit C++:
- Extrahieren Sie Informationen über eine Schrift, indem Sie eine Instanz der Klasse TtfFont erstellen.
- Geben Sie den Namen der Schrift mit der Eigenschaft FontName aus.
- Geben Sie die Anzahl der Glyphen in der Schrift mit der Eigenschaft NumGlyphs aus. Die Schriftmetriken, wie Ascender, Descender, Typo Ascender, Typo Descender und UnitsPerEm, werden ebenfalls ausgegeben.
- Der Code ruft dann die Unicode‑Codierungstabelle
cmapaus der Schrift ab, die verwendet wird, um Zeichenkodierungen zu Glyphen‑Indizes zuzuordnen. Es wird geprüft, ob die Schrift sowohl diecmap‑Tabelle als auch dieglyf‑Tabelle enthält, die zum Zugriff auf die Glyphen verwendet wird. Wenn beide Tabellen vorhanden sind, wird derglyf‑Index für das ZeichenAabgerufen und anschließend das Glyph für das SymbolAerhalten. - Geben Sie die Begrenzungsbox des Glyphen
Aund dessen Breite aus.
C++-Code zum Abrufen von Informationen über die Glyphen der Schrift
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)));
}
}
}