.NET 字體管理 API

在數字 typography 中,字體定義了用於字符外觀的特定樣式。大多數情況下,字體在文檔和網頁中用於使文本風格化。每種字體都在一個文件中進行描述,該文件包含有關字符大小、粗細、樣式以及編碼的信息。由於字體是各種文件格式的重要組成部分,Aspose 提供了一個專用 API 來處理流行字體類型的操作和渲染,包括 TrueTypeCFFOpenType、和 Type1。在本文中,您將學習如何使用 C# 和 Aspose.Font for .NET 從字體中加載、保存和提取信息。

.NET 字體操作 API - 免費下載

Aspose.Font for .NET 是一種預置型 API,可讓您在 .NET 應用程序中使用 C# 實現字體管理功能。除了加載、保存和從字體中提取信息外,API 還允許您在需要時呈現字形或文本。您可以 下載 API 或使用 NuGet 在您的 .NET 應用程序中安裝它。

PM> Install-Package Aspose.Font

使用 C# 從文件加載或保存字體

您可以從存儲在數字存儲器上的文件中加載字體以檢索字體信息。 Aspose.Font for .NET 公開了單獨的類來處理特定類型的字體,即CFF、TrueType 等。以下是加載和保存字體的步驟。

加載和保存 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);

//從字體中獲取 cmap unicode 編碼表作為對象 TtfCMapFormatBaseTable 以訪問有關符號“A”的字體字形的信息。
//還要檢查字體是否具有對象 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 博客