API quản lý phông chữ .NET

Trong kiểu chữ kỹ thuật số, phông chữ xác định các kiểu cụ thể sẽ được sử dụng cho hình thức của các ký tự. Thông thường, phông chữ được sử dụng trong tài liệu và trang web để tạo kiểu cho văn bản. Mỗi phông chữ được mô tả trong một tệp chứa thông tin về kích thước, trọng lượng, kiểu dáng cũng như mã hóa của ký tự. Vì phông chữ là một phần quan trọng của các định dạng tệp khác nhau, Aspose cung cấp API chuyên dụng để xử lý thao tác và hiển thị các loại phông chữ phổ biến bao gồm TrueType, CFF, OpenType, và Loại1. Trong bài viết này, bạn sẽ tìm hiểu cách tải, lưu và trích xuất thông tin từ phông chữ bằng C# với Aspose.Font for .NET.

API thao tác phông chữ .NET - Tải xuống miễn phí

Aspose.Font for .NET là API tại chỗ cho phép bạn triển khai các tính năng quản lý phông chữ bằng C# trong các ứng dụng .NET của mình. Cùng với việc tải, lưu và trích xuất thông tin từ phông chữ, API cũng cho phép bạn hiển thị glyph hoặc văn bản nếu cần. Bạn có thể tải xuống API hoặc cài đặt nó trong các ứng dụng .NET của mình bằng NuGet.

PM> Install-Package Aspose.Font

Tải hoặc lưu phông chữ từ tệp bằng C#

Bạn có thể tải phông chữ từ tệp được lưu trữ trên bộ lưu trữ kỹ thuật số của mình để truy xuất thông tin của phông chữ. Aspose.Font cho .NET hiển thị các lớp riêng biệt để xử lý các loại phông chữ cụ thể, chẳng hạn như CFF, TrueType, v.v. Sau đây là các bước để tải và lưu một phông chữ.

  • Tải phông chữ từ tệp (sử dụng đường dẫn của tệp hoặc mảng byte) bằng lớp FontDefinition.
  • Truy cập thông tin của phông chữ bằng lớp CffFont, TtfFont hoặc Type1Font.
  • Lưu tệp (nếu cần).

Tải và lưu phông chữ CFF

Mẫu mã sau đây cho biết cách tải và lưu phông chữ CFF bằng C#.

// Để biết các ví dụ và tệp dữ liệu đầy đủ, vui lòng truy cập https://github.com/aspose-font/Aspose.Font-for-.NET
//mảng byte để tải Phông chữ từ
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;

//Làm việc với dữ liệu từ đối tượng CffFont vừa tải

//Lưu CffFont vào đĩa
//Tên tệp phông chữ đầu ra với đường dẫn đầy đủ
string outputFile = RunExamples.GetDataDir_Data() + "OpenSans-Regular_out.cff";

cffFont.Save(outputFile);

Tải và Lưu Phông chữ TrueType

Mẫu mã sau đây cho biết cách tải và lưu phông chữ TrueType bằng C#.

// Để biết các ví dụ và tệp dữ liệu đầy đủ, vui lòng truy cập https://github.com/aspose-font/Aspose.Font-for-.NET
//mảng byte để tải Phông chữ từ
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;

//Làm việc với dữ liệu từ đối tượng TtfFont vừa tải

//Lưu TtfFont vào đĩa
//Tên tệp phông chữ đầu ra với đường dẫn đầy đủ
string outputFile = RunExamples.GetDataDir_Data() + "Montserrat-Regular_out.ttf";

ttfFont.Save(outputFile);

Tải và lưu phông chữ Type1

Mẫu mã sau đây cho biết cách tải và lưu phông chữ Type1 bằng C#.

// Để biết các ví dụ và tệp dữ liệu đầy đủ, vui lòng truy cập 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;

Trích xuất số liệu phông chữ bằng C#

Aspose.Font cho .NET cũng cho phép bạn truy xuất thông tin số liệu phông chữ như Ascender, Descender, TypoAscender, TypoDescender và UnitsPerEm. Sau đây là các bước để làm như vậy.

  • Sử dụng lớp FontDefinition để tải phông chữ TrueType hoặc Type1 từ tệp.
  • Mở phông chữ bằng loại phông chữ tương ứng, ví dụ Type1Font, TtfFont, v.v.
  • Truy cập thông tin số liệu của phông chữ.

Các mẫu mã sau đây cho biết cách trích xuất số liệu phông chữ từ phông chữ TrueType và Type1 bằng C#.

Trích xuất số liệu từ Phông chữ TrueType

// Để biết các ví dụ và tệp dữ liệu đầy đủ, vui lòng truy cập 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);

//Nhận bảng mã hóa cmap unicode từ phông chữ dưới dạng đối tượng TtfCMapFormatBaseTable để truy cập thông tin về nét chữ phông chữ cho ký hiệu 'A'.
//Ngoài ra, hãy kiểm tra xem phông chữ có đối tượng TtfGlyfTable (bảng 'glyf') để truy cập glyph hay không.
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);

    //Mã cho ký hiệu 'A'
    char unicode = (char)65;

    //Chỉ số Glyph cho 'A'
    uint glIndex = cmapTable.GetGlyphIndex(unicode);

    if (glIndex != 0)
    {
        //Glyph cho 'A'
        Glyph glyph = font.GetGlyphById(glIndex);
        if (glyph != null)
        {
            //In số liệu glyph
            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)));
        }
    }
}

Trích xuất số liệu từ Phông chữ Type1

// Để biết các ví dụ và tệp dữ liệu đầy đủ, vui lòng truy cập 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);

Phát hiện các ký hiệu Latinh trong phông chữ bằng C#

Bạn cũng có thể phát hiện văn bản Latinh trong các phông chữ bằng cách giải mã các mã hình tượng bằng cách sử dụng Aspose.Font cho .NET. Sau đây là các bước để thực hiện thao tác này.

  • Tải Phông chữ từ tệp bằng lớp FontDefinition.
  • Giải mã GlyphId bằng phương thức DecodeToGid() của lớp phông chữ tương ứng.

Các mẫu mã sau đây cho biết cách giải mã các ký hiệu Latinh trong phông chữ TrueType và Type1 bằng C#.

Phát hiện các ký hiệu Latinh trong Phông chữ TrueType

// Để biết các ví dụ và tệp dữ liệu đầy đủ, vui lòng truy cập 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));
}

Phát hiện các ký hiệu Latinh trong Phông chữ Type1

// Để biết các ví dụ và tệp dữ liệu đầy đủ, vui lòng truy cập 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));
}

Sự kết luận

Trong bài viết này, bạn đã biết cách tải và lưu các phông chữ CFF, TrueType và Type1 theo chương trình bằng C#. Hơn nữa, bạn đã học cách trích xuất thông tin số liệu phông chữ từ phông chữ TrueType và Type1 trong các ứng dụng .NET của mình. Bạn có thể khám phá thêm các tính năng thú vị do Aspose.Font cung cấp cho .NET trong tài liệu. Để biết thêm thông tin cập nhật, hãy tiếp tục truy cập Aspose.Font blog.