.NETフォント管理API

デジタルタイポグラフィでは、フォントは文字の外観に使用される特定のスタイルを定義します。ほとんどの場合、フォントはテキストを定型化するためにドキュメントやWebページで使用されます。各フォントは、文字のサイズ、太さ、スタイル、およびエンコーディングに関する情報を含むファイルに記述されています。フォントはさまざまなファイル形式の重要な部分であるため、Asposeは、TrueTypeCFFOpenType、およびType1。この記事では、Aspose.Font for .NETでC#を使用してフォントから情報をロード、保存、および抽出する方法を学習します。

.NETフォント操作API-無料ダウンロード

Aspose.Font for .NETは、.NETアプリケーション内でC#を使用してフォント管理機能を実装できるオンプレミスAPIです。 APIは、フォントからの読み込み、保存、および情報抽出に加えて、必要に応じてグリフまたはテキストをレンダリングすることもできます。 APIをダウンロードするか、NuGetを使用して.NETアプリケーションにインストールできます。

PM> Install-Package Aspose.Font

C#を使用してファイルからフォントをロードまたは保存する

フォントの情報を取得するために、デジタルストレージに保存されているファイルからフォントをロードできます。 Aspose.Font for .NETは、特定のタイプのフォント(CFF、TrueTypeなど)を処理するための個別のクラスを公開します。フォントをロードおよび保存する手順は次のとおりです。

  • FontDefinitionクラスを使用して、(ファイルのパスまたはバイト配列を使用して)ファイルからフォントをロードします。
  • CffFontTtfFont、またはType1Fontクラスを使用してフォントの情報にアクセスします。
  • ファイルを保存します(必要な場合)。

CFFフォントのロードと保存

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

// 完全な例とデータファイルについては、https://github.com/aspose-font/Aspose.Font-for-.NETにアクセスしてください。
//フォントをロードするバイト配列
string dataDir = RunExamples.GetDataDir_Data();

byte[] fontMemoryData = File.ReadAllBytes(dataDir + "OpenSans-Regular.cff");
FontDefinition fd = new FontDefinition(FontType.CFF, new FontFileDefinition("cff", new ByteContentStreamSource(fontMemoryData)));
CffFont cffFont = Aspose.Font.Font.Open(fd) as CffFont;

//ロードされたばかりのCffFontオブジェクトからのデータを操作する

//CffFontをディスクに保存
//フルパスでフォントファイル名を出力
string outputFile = RunExamples.GetDataDir_Data() + "OpenSans-Regular_out.cff";

cffFont.Save(outputFile);

TrueTypeフォントをロードして保存する

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

// 完全な例とデータファイルについては、https://github.com/aspose-font/Aspose.Font-for-.NETにアクセスしてください。
//フォントをロードするバイト配列
string dataDir = RunExamples.GetDataDir_Data();
            
byte[] fontMemoryData = File.ReadAllBytes(dataDir + "Montserrat-Regular.ttf");
FontDefinition fd = new FontDefinition(FontType.TTF, new FontFileDefinition("ttf", new ByteContentStreamSource(fontMemoryData)));
TtfFont ttfFont = Aspose.Font.Font.Open(fd) as TtfFont;

//ロードされたばかりのTtfFontオブジェクトからのデータを操作する

//TtfFontをディスクに保存
//フルパスでフォントファイル名を出力
string outputFile = RunExamples.GetDataDir_Data() + "Montserrat-Regular_out.ttf";

ttfFont.Save(outputFile);

Type1フォントのロードと保存

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

// 完全な例とデータファイルについては、https://github.com/aspose-font/Aspose.Font-for-.NETにアクセスしてください。
string fileName = dataDir + "courier.pfb"; //Font file name with full path

FontDefinition fd = new FontDefinition(FontType.Type1, new FontFileDefinition("pfb", new FileSystemStreamSource(fileName)));
Type1Font font = Aspose.Font.Font.Open(fd) as Type1Font;

C#を使用してフォントメトリックを抽出する

Aspose.Font for .NETでは、Ascender、Descender、TypoAscender、TypoDescender、UnitsPerEmなどのフォントメトリック情報を取得することもできます。そのための手順は次のとおりです。

  • FontDefinitionクラスを使用して、ファイルからTrueTypeまたはType1フォントをロードします。
  • それぞれのフォントタイプクラス、つまりType1Font、TtfFontなどを使用してフォントを開きます。
  • フォントのメトリック情報にアクセスします。

次のコードサンプルは、C#を使用してTrueTypeおよびType1フォントからフォントメトリックを抽出する方法を示しています。

TrueTypeフォントからメトリクスを抽出する

// 完全な例とデータファイルについては、https://github.com/aspose-font/Aspose.Font-for-.NETにアクセスしてください。
string fileName = dataDir + "Montserrat-Regular.ttf"; //Font file name with full path

FontDefinition fd = new FontDefinition(FontType.TTF, new FontFileDefinition("ttf", new FileSystemStreamSource(fileName)));
TtfFont font = Aspose.Font.Font.Open(fd) as TtfFont;

string name = font.FontName;
Console.WriteLine("Font name: " + name);
Console.WriteLine("Glyph count: " + font.NumGlyphs);
string metrics = string.Format(
    "Font metrics: ascender - {0}, descender - {1}, typo ascender = {2}, typo descender = {3}, UnitsPerEm = {4}",
    font.Metrics.Ascender, font.Metrics.Descender,
    font.Metrics.TypoAscender, font.Metrics.TypoDescender, font.Metrics.UnitsPerEM);

Console.WriteLine(metrics);

//シンボル「A」のフォントグリフに関する情報にアクセスするには、オブジェクトTtfCMapFormatBaseTableとしてフォントからcmapユニコードエンコーディングテーブルを取得します。
//また、フォントにグリフにアクセスするためのオブジェクトTtfGlyfTable(テーブル'glyf')があることを確認してください。
Aspose.Font.TtfCMapFormats.TtfCMapFormatBaseTable cmapTable = null;
if (font.TtfTables.CMapTable != null)
{
    cmapTable = font.TtfTables.CMapTable.FindUnicodeTable();
}
if (cmapTable != null && font.TtfTables.GlyfTable != null)
{
    Console.WriteLine("Font cmap unicode table: PlatformID = " + cmapTable.PlatformId + ", PlatformSpecificID = " + cmapTable.PlatformSpecificId);

    //「A」記号のコード
    char unicode = (char)65;

    //'A'のグリフインデックス
    uint glIndex = cmapTable.GetGlyphIndex(unicode);

    if (glIndex != 0)
    {
        //'A'のグリフ
        Glyph glyph = font.GetGlyphById(glIndex);
        if (glyph != null)
        {
            //グリフメトリックを印刷する
            Console.WriteLine("Glyph metrics for 'A' symbol:");
            string bbox = string.Format(
                "Glyph BBox: Xmin = {0}, Xmax = {1}" + ", Ymin = {2}, Ymax = {3}",
                glyph.GlyphBBox.XMin, glyph.GlyphBBox.XMax,
                glyph.GlyphBBox.YMin, glyph.GlyphBBox.YMax);
            Console.WriteLine(bbox);
            Console.WriteLine("Width:" + font.Metrics.GetGlyphWidth(new GlyphUInt32Id(glIndex)));
        }
    }
}

Type1フォントからメトリックを抽出する

// 完全な例とデータファイルについては、https://github.com/aspose-font/Aspose.Font-for-.NETにアクセスしてください。
string fileName = dataDir + "courier.pfb"; //Font file name with full path

FontDefinition fd = new FontDefinition(FontType.Type1, new FontFileDefinition("pfb", new FileSystemStreamSource(fileName)));
Type1Font font = Aspose.Font.Font.Open(fd) as Type1Font;

string name = font.FontName;
Console.WriteLine("Font name: " + name);
Console.WriteLine("Glyph count: " + font.NumGlyphs);
string metrics = string.Format(
    "Font metrics: ascender - {0}, descender - {1}, typo ascender = {2}, typo descender = {3}, UnitsPerEm = {4}",
    font.Metrics.Ascender, font.Metrics.Descender,
    font.Metrics.TypoAscender, font.Metrics.TypoDescender, font.Metrics.UnitsPerEM);

Console.WriteLine(metrics);

C#を使用してフォント内のラテン記号を検出する

Aspose.Font for .NETを使用してグリフコードをデコードすることにより、フォント内のラテン語のテキストを検出することもできます。この操作を実行する手順は次のとおりです。

  • FontDefinitionクラスを使用してファイルからフォントをロードします。
  • それぞれのフォントクラスのDecodeToGid()メソッドを使用して、GlyphIdをデコードします。

次のコードサンプルは、C#を使用してTrueTypeおよびType1フォントのラテン記号をデコードする方法を示しています。

TrueTypeフォントでラテン記号を検出する

// 完全な例とデータファイルについては、https://github.com/aspose-font/Aspose.Font-for-.NETにアクセスしてください。
string fileName = dataDir + "Montserrat-Regular.ttf"; //Font file name with full path

FontDefinition fd = new FontDefinition(FontType.TTF, new FontFileDefinition("ttf", new FileSystemStreamSource(fileName)));
TtfFont ttfFont = Aspose.Font.Font.Open(fd) as TtfFont;

bool latinText = true;


for (uint code = 65; code < 123; code++)
{
    GlyphId gid = ttfFont.Encoding.DecodeToGid(code);
    if (gid == null || gid == GlyphUInt32Id.NotDefId)
    {
        latinText = false;
    }
}

if (latinText)
{
    Console.WriteLine(string.Format("Font {0} supports latin symbols.", ttfFont.FontName));
}
else
{
    Console.WriteLine(string.Format("Latin symbols are not supported by font {0}.", ttfFont.FontName));
}

Type1フォントでラテン記号を検出する

// 完全な例とデータファイルについては、https://github.com/aspose-font/Aspose.Font-for-.NETにアクセスしてください。
string fileName = dataDir + "courier.pfb"; //Font file name with full path

FontDefinition fd = new FontDefinition(FontType.Type1, new FontFileDefinition("pfb", new FileSystemStreamSource(fileName)));
Type1Font font = Aspose.Font.Font.Open(fd) as Type1Font;

bool latinText = true;


for (uint code = 65; code < 123; code++)
{
    GlyphId gid = font.Encoding.DecodeToGid(code);
    if (gid == null || gid == GlyphUInt32Id.NotDefId)
    {
        latinText = false;
    }
}

if (latinText)
{
    Console.WriteLine(string.Format("Font {0} supports latin symbols.", font.FontName));
}
else
{
    Console.WriteLine(string.Format("Latin symbols are not supported by font {0}.", font.FontName));
}

結論

この記事では、C#を使用してプログラムでCFF、TrueType、およびType1フォントをロードおよび保存する方法について説明しました。さらに、.NETアプリケーション内のTrueTypeおよびType1フォントからフォントメトリック情報を抽出する方法を学習しました。 Aspose.Font for .NETが提供するさらに興味深い機能については、ドキュメントをご覧ください。その他の更新については、Aspose.Fontブログにアクセスしてください。