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