フォントは、テキストの外観を定義するために使用されるデジタルドキュメントとWebページの不可欠な部分です。フォントファイルは、スタイル、太さ、サイズなどのフォントに関する情報を格納するために使用されます。情報を抽出するためにフォントを操作する必要がある場合があります。このようなシナリオでは、この記事では、C++を使用してTrueType、CFF、およびType1フォントから情報をロードおよび読み取る方法を学習します。

C++フォント操作ライブラリ

Aspose.Font for C++は、TrueTypeCFFOpenType、およびType1を操作できる強力なフォント操作APIです。 、EOT、およびC++アプリケーション内からの多くのその他のフォント。フォントからエンコーディング情報をロード、保存、抽出したり、グリフを操作したりできます。 APIは、ダウンロードセクションからダウンロードするか、NuGetからインストールできます。

C++を使用してCFF、TrueType、およびType1フォントをロードします

Aspose.Font for C++を使用すると、ストレージメディアにあるファイルからCFF、TrueType、およびType1フォントをロードできます。フォントをロードする手順は次のとおりです。

  • FontDefinitionクラスのオブジェクトを作成して、そのタイプ(TrueType、Type1など)を指定してフォントをロードします。
  • CffFontTtfFont、またはType1Fontクラスを使用して、FontDefinitionオブジェクトからそれぞれCFF、TrueType、およびType1フォントを開きます。

C++を使用してCFFフォントをロードする

次のコードサンプルは、C++を使用してCFFフォントをロードする方法を示しています。

For complete examples and data files, please go to https://github.com/aspose-font/Aspose.Font-for-C
System::String fileName = dataDir + u"OpenSans-Regular.cff";
//フルパスのフォントファイル名
    
System::SharedPtr<FontDefinition> fd = System::MakeObject<FontDefinition>(Aspose::Font::FontType::CFF, System::MakeObject<FontFileDefinition>(u"cff", System::MakeObject<FileSystemStreamSource>(fileName)));
System::SharedPtr<CffFont> ttfFont = System::DynamicCast_noexcept<Aspose::Font::Cff::CffFont>(Aspose::Font::Font::Open(fd));

C++を使用してTrueTypeフォントをロードする

次のコードサンプルは、C++を使用してTrueTypeフォントをロードする方法を示しています。

For complete examples and data files, please go to https://github.com/aspose-font/Aspose.Font-for-C
System::String fileName = dataDir + u"Montserrat-Regular.ttf";
//フルパスのフォントファイル名
    
System::SharedPtr<FontDefinition> fd = System::MakeObject<FontDefinition>(Aspose::Font::FontType::TTF, System::MakeObject<FontFileDefinition>(u"ttf", System::MakeObject<FileSystemStreamSource>(fileName)));
System::SharedPtr<TtfFont> ttfFont = System::DynamicCast_noexcept<Aspose::Font::Ttf::TtfFont>(Aspose::Font::Font::Open(fd));

C++を使用してType1フォントをロードする

次のコードサンプルは、C++を使用してType1フォントをロードする方法を示しています。

For complete examples and data files, please go to https://github.com/aspose-font/Aspose.Font-for-C
System::String fileName = dataDir + u"courier.pfb";
//フルパスのフォントファイル名
    
System::SharedPtr<FontDefinition> fd = System::MakeObject<FontDefinition>(Aspose::Font::FontType::Type1, System::MakeObject<FontFileDefinition>(u"pfb", System::MakeObject<FileSystemStreamSource>(fileName)));
System::SharedPtr<Type1Font> font = System::DynamicCast_noexcept<Aspose::Font::Type1::Type1Font>(Aspose::Font::Font::Open(fd));

C++を使用してTrueTypeまたはType1からフォントメトリックを抽出します

Aspose.Font for C++では、Ascender、Descender、TypoAscender、TypoDescender、UnitsPerEmなどの情報を含むフォントメトリックを抽出することもできます。以下は、TrueTypeまたはType1フォントからフォントメトリックを取得する手順です。

  • FontDefinitionクラスのオブジェクトを作成して、TrueTypeまたはType1フォントをロードします。
  • フォントの種類に応じて、TtfFontまたはType1Fontクラスを使用してフォントを開きます。
  • フォントのメトリック情報を抽出します。

C++を使用してTrueTypeフォントからフォントメトリックを取得する

For complete examples and data files, please go to https://github.com/aspose-font/Aspose.Font-for-C
System::String fileName = dataDir + u"Montserrat-Regular.ttf";
//フルパスのフォントファイル名
    
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);
    
//シンボル「A」のフォントグリフに関する情報にアクセスするには、オブジェクトTtfCMapFormatBaseTableとしてフォントからcmapユニコードエンコーディングテーブルを取得します。
//また、フォントにグリフにアクセスするためのオブジェクトTtfGlyfTable(テーブル'glyf')があることを確認してください。
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());
    
    //「A」記号のコード
    char16_t unicode = (char16_t)65;
    
    //'A'のグリフインデックス
    uint32_t glIndex = cmapTable->GetGlyphIndex(unicode);
    
    if (glIndex != static_cast<uint32_t>(0))
    {
        //'A'のグリフ
        System::SharedPtr<Glyph> glyph = font->GetGlyphById(glIndex);
        if (glyph != nullptr)
        {
            //グリフメトリックを印刷する
            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)));
        }
    }
}

C++を使用してType1フォントからフォントメトリックを抽出する

For complete examples and data files, please go to https://github.com/aspose-font/Aspose.Font-for-C
System::String fileName = dataDir + u"courier.pfb";
//フルパスのフォントファイル名
    
System::SharedPtr<FontDefinition> fd = System::MakeObject<FontDefinition>(Aspose::Font::FontType::Type1, System::MakeObject<FontFileDefinition>(u"pfb", System::MakeObject<FileSystemStreamSource>(fileName)));
System::SharedPtr<Type1Font> font = System::DynamicCast_noexcept<Aspose::Font::Type1::Type1Font>(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);

結論

この記事では、CFF、TrueType、およびType1フォントをロードし、C++を使用してそれらの情報を抽出する方法を学習しました。 ドキュメントを使用して、C++フォント操作APIの詳細を調べることができます。