API управления шрифтами .NET

В цифровой типографике шрифты определяют определенные стили, используемые для внешнего вида символов. Чаще всего шрифты используются в документах и веб-страницах для стилизации текста. Каждый шрифт описан в файле, который содержит информацию о размере символов, весе, стилях, а также кодировке. Поскольку шрифты являются важной частью различных форматов файлов, Aspose предлагает специальный API для обработки и рендеринга популярных типов шрифтов, включая TrueType, CFF, OpenType, и Тип1. В этой статье вы узнаете, как загружать, сохранять и извлекать информацию из шрифтов с помощью C# с помощью Aspose.Font for .NET.

.NET API для управления шрифтами — скачать бесплатно

Aspose.Font for .NET — это локальный API, который позволяет реализовать функции управления шрифтами с помощью C# в ваших приложениях .NET. Наряду с загрузкой, сохранением и извлечением информации из шрифта API также позволяет отображать глиф или текст, если это необходимо. Вы можете либо загрузить API, либо установить его в свои приложения .NET с помощью NuGet.

PM> Install-Package Aspose.Font

Загрузка или сохранение шрифтов из файла с помощью С#

Вы можете загрузить шрифт из файла, хранящегося в вашем цифровом хранилище, для получения информации о шрифте. Aspose.Font для .NET предоставляет отдельные классы для работы с определенными типами шрифтов, например, CFF, TrueType и т. д. Ниже приведены шаги для загрузки и сохранения шрифта.

  • Загрузите шрифт из файла (используя путь к файлу или массив байтов) с помощью класса FontDefinition.
  • Получите доступ к информации о шрифте с помощью класса CffFont, TtfFont или Type1Font.
  • Сохраните файл (если требуется).

Загрузить и сохранить шрифт CFF

В следующем примере кода показано, как загружать и сохранять шрифты CFF с помощью C#.

// Полные примеры и файлы данных см. на странице 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

В следующем примере кода показано, как загружать и сохранять шрифты TrueType с помощью C#.

// Полные примеры и файлы данных см. на странице 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

В следующем примере кода показано, как загружать и сохранять шрифты Type1 с помощью C#.

// Полные примеры и файлы данных см. на странице 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 для .NET также позволяет получать информацию о метриках шрифта, таких как Ascender, Descender, TypoAscender, TypoDescender и UnitsPerEm. Ниже приведены шаги для этого.

  • Используйте класс FontDefinition для загрузки шрифта TrueType или Type1 из файла.
  • Откройте шрифт, используя соответствующий класс типа шрифта, т. е. Type1Font, TtfFont и т. д.
  • Получите доступ к информации о метриках шрифта.

В следующих примерах кода показано, как извлечь метрики шрифтов из шрифтов TrueType и Type1 с помощью C#.

Извлечение метрик из шрифта 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);

//Получите таблицу кодировки Unicode cmap из шрифта как объект 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);

    //Код для символа «А»
    char unicode = (char)65;

    //Индекс глифа для «А»
    uint glIndex = cmapTable.GetGlyphIndex(unicode);

    if (glIndex != 0)
    {
        //Глиф для «А»
        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 для .NET. Ниже приведены шаги для выполнения этой операции.

  • Загрузите шрифт из файла с помощью класса FontDefinition.
  • Декодируйте GlyphId с помощью метода DecodeToGid() соответствующего класса шрифта.

В следующих примерах кода показано, как декодировать латинские символы в шрифтах TrueType и Type1 с помощью C#.

Обнаружение латинских символов в шрифте 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));
}

Вывод

В этой статье вы увидели, как программно загружать и сохранять шрифты CFF, TrueType и Type1 с помощью C#. Кроме того, вы узнали, как извлекать информацию о метриках шрифтов из шрифтов TrueType и Type1 в приложениях .NET. Вы можете изучить более интересные функции, предлагаемые Aspose.Font для .NET, в документации. Чтобы узнать больше об обновлениях, продолжайте посещать Aspose.Font блог.