フォント情報の取得
Aspose.Font API ソリューション for C++ でフォントメトリックを探求しましょう。すべての筆画、曲線、ニュアンスに関する詳細な洞察を学べます。当ソリューションは、グリフを簡単に操作でき、任意のフォントの固有の特性に関する情報を抽出することを可能にします。
Aspose.Font API ソリューション for C++ では、フォント変換、グリフ操作、ラテン文字シンボル検出など、強力な機能群を提供し、フォントの可能性の世界へと導きます。弊APIは、グリフの操作とフォントに含まれるグリフ情報の取得も可能にします。デザインを向上させ、プロジェクトを強化し、Aspose.Font for C++ でグリフの真の潜在能力を解き放ちましょう。今すぐ無料トライアルをご利用ください!
グリフとは、文字やシンボルのフォントにおける独自のデザインです。このフォント単位をより理解するには、 Introduction to Glyph 記事をご覧ください。フォントメトリックは、フォントの視覚的外観を記述するために使用される測定値や仕様です。これらのメトリックには、文字の高さ、幅、文字間の間隔、ベースラインの位置などが含まれます。デザイナーやソフトウェア開発者は、これらを用いてデジタル文書やユーザインタフェースにおけるテキストのレイアウトを正確に予測できます。
このページでは、グリフ数、文字の高さ、グリフ『A』の幅など、さまざまなフォントメトリックの取得方法を説明します。ただし、グリフの操作全体の機能については、Using Glyph objects 記事で詳しく説明されています。コード例にはフォントメタデータの取得セクションが含まれ、フォント名も取得できます。この機能は、Aspose エコシステム内で利用可能な Font Metadata アプリなどの Web アプリケーションに統合できます。完全なサンプルやデータファイルを学びたい場合は、Aspose Github Project をご覧ください。
フォントメトリックを取得するには、次が必要です:
機能が豊富で強力かつ使いやすいドキュメント操作・変換 API である Aspose.Font for C++ API。
NuGet パッケージマネージャーを開き、Aspose.Font を検索してインストールしてください。また、パッケージマネージャーコンソールから次のコマンドを使用することもできます。
Package Manager Console Command
PM> Install-Package Aspose.Font
C++ を使用してフォントメトリックを取得する手順:
- フォントの情報を抽出するには、 TtfFont クラスのインスタンスを作成します。
- FontName プロパティを使用してフォント名を出力します。
- NumGlyphs プロパティを使用してフォント内のグリフ数を出力します。アセンダ、ディセンダ、タイポアセンダ、タイポディセンダ、UnitsPerEm などのフォントメトリックも出力されます。
cmapユニコードエンコーディングテーブルをフォントから取得し、文字コードとグリフインデックスのマッピングに使用します。フォントが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)));
}
}
}