Як завантажити шрифти? | Рішення API для .NET

Огляд

Щоб відповісти на питання, як завантажувати шрифти, спочатку нам потрібно дізнатися, що будь-який шрифт фізично є масивом байтів, в якому дані представлені в певному форматі. Тому для правильного завантаження шрифту необхідно знати два ключових параметри:

Об’єкти та параметри, необхідні для завантаження шрифту

Aspose.Font для .NET надає об’єкт FontDefiniton для сповіщення двох ключових параметрів, необхідних для завантаження шрифту.

Після створення та ініціювання об’єкта FontDefiniton вам потрібно лише викликати статичний метод Aspose.Font.Font.Open() і передати щойно ініціалізований об’єкт FontDefiniton як параметр для завантаження потрібного шрифту та отримання посилання на нього.

Опишемо це за допомогою псевдокоду:

1 
2using Aspose.Font;
3    ...
4
5    // Initialize object FontDefinition with appropriate properties
6    FontDefinition fontDef = new FontDefinition(); 
7    Font desiredFont = Font.Open(fontDef);

Кінцевим результатом завантаження шрифту є отримання об’єкта типу Aspose.Font.Font. Клас Aspose.Font.Font є базовим класом шрифту Aspose.Font для бібліотеки .NET. Він представляє основний функціонал роботи зі шрифтами.

Завантаживши шрифт в об’єкт типу Aspose.Font.Font, ви зможете відтворювати текст із цим шрифтом, отримувати дані кодування та показники шрифту. Ви також зможете змінити або зберегти цей шрифт і багато іншого.

Щоб ініціювати об’єкт FontDefiniton, нам потрібно, як згадувалося раніше, надати йому 2 параметри шрифту: тип формату та об’єкт, який описує зберігання двійкових даних шрифту.

Перший параметр повідомляється за допомогою переліку FontType.

Щоб спростити роботу з другим параметром, Aspose.Font пропонує серію об’єктів, які надають універсальний доступ до двійкових даних шрифту незалежно від місця розміщення шрифту.

Цей універсальний доступ пов’язаний з такою річчю, як потік байтів. Отже, незалежно від місця розміщення шрифту – у файлі на диску, всередині іншого файлу, масиві байтів у пам’яті – у будь-якому випадку спеціальні об’єкти Aspose.Font нададуть доступ до потоку байтів. , пов’язані з потрібним шрифтом.

Опишемо ці об’єкти:

  1. Клас StreamSource. Цей абстрактний базовий клас визначає властивості та методи, які надають доступ до потоку байтів шрифту.

Метод GetFontStream() цього класу повертає потік, пов’язаний з даними двійкового шрифту. Властивість Offset вказує на позицію в цьому потоці, звідки ми повинні почати читати дані.

  1. Два найбільш часто використовувані класи, успадковані від базового StreamSource:

Як ініціювати операцію?

Ось приклади запуску операції.1. Припустімо, що шрифт знаходиться у файлі під назвою Lora.ttf. У цьому випадку, щоб отримати доступ до потоку байтів цього шрифту, нам потрібно створити об’єкт типу FileSystemStreamSource за допомогою цього єдиного конструктора:

1 
2    FileSystemStreamSource fontSource = new FileSystemStreamSource("Lora.ttf");
  1. Якщо двійкові дані шрифту розташовані в двійковому масиві, визначеному змінною byte [] fontArray, тоді об’єкт типу ByteContentStreamSource забезпечить доступ до потоку даних шрифту на основі змінної fontArray.

Щоб отримати доступ до потоку байтів шрифтів, нам потрібно створити об’єкт типу ByteContentStreamSource, щоб отримати доступ до потоку, пов’язаного з масивом байтів шрифтів, використовуючи такий код:

1 
2    ByteContentStreamSource fontSource = new ByteContentStreamSource(fontArray);

Отже, щоб надати доступ до двійкових даних шрифту, використовуйте об’єкти, успадковані від базового класу StreamSource. Далі ми будемо називати такі об’єкти джерелами потоку шрифтів.

Об’єкт FontFileDefinition

Більшість фасадів розташовані в звичайних файлах, але в той же час частина шрифтів може мати різні джерела даних. Щоб об’єднати в один об’єкт терміни файл і двійковий потік шрифту, бібліотека Aspose.Font надає спеціальний об’єкт FontFileDefinition.

Цей об’єкт має такі властивості:

Найпростішим і одним з найбільш часто використовуваних конструкторів цього об’єкта є конструктор з такою сигнатурою: FontFileDefinition (FileInfo fontFile), використовуйте цей конструктор для випадків, коли потрібний шрифт знаходиться у файлі на жорсткому диску.

Ось приклад ініціювання такого об’єкта для шрифту Montserrat, який знаходиться у файлі C:\Windows\Fonts\Montserrat.ttf:

1 
2    FontFileDefinition fileDef = new FontFileDefinition(new FileInfo(@"C:\Windows\Fonts\Montserrat.ttf"));

Крім того, FontFileDefinition може посилатися на шрифт Montserrat за допомогою таких конструкторів:

1 
2    FontFileDefinition fileDef = new FontFileDefinition(new FileSystemStreamSource(@"C:\Windows\Fonts\Montserrat.ttf"));
3
4    FontFileDefinition fileDef = new FontFileDefinition("ttf", new FileSystemStreamSource(@"C:\Windows\Fonts\Montserrat.ttf"));

Параметр fileExtension має відповідати стандартному для формату шрифту розширенню. Наприклад, якщо формат шрифту TrueType, тоді значенням параметра fileExtension може бути ttf або ttc (якщо файл шрифту є набором шрифтів TrueType).

Якщо формат шрифту Embedded Open Type, тоді значення параметра fileExtension має бути eot.

У таблиці нижче показано формати файлів шрифтів, які найчастіше використовуються в Aspose.Font для .NET. Ось вони з відповідними значеннями, які має приймати параметр fileExtension.

Формат файлу шрифтуfileExtension
TrueType, окремий шрифтttf
TrueType колекція шрифтівttc
Web Open Font Formatwoff
Web Open Font Format version 2.0woff2
Embedded OpenTypeeot
Adobe Type 1 fontpfa, pfb, afm, pfm
Compact Font Formatcff, can be null

Якщо дані шрифту починаються не з позиції 0 потоку байтів, використовуйте такий конструктор із параметром offset:

1 
2    FontFileDefinition(string fileExtension, StreamSource streamSource, long offset).

Як ініціювати об’єкт FontDefinition?

Тепер, коли ви маєте уявлення про об’єкти, успадковані від класу StreamSource і які надають доступ до потоку байтів шрифтів, а також про об’єкт FontFileDefinition, ми пояснимо, ви дізнаєтесь, як правильно ініціювати об’єкт FontDefiniton із цими об’єктами для різних ситуацій.

Об’єкт FontDefiniton надає вам багато перевантажених конструкторів. Спільною рисою всіх існуючих конструкторів є параметр FontType. Він описує тип формату шрифту.

Як було зазначено раніше, окрім значення FontType, об’єкт FontDefiniton має бути ініціалізовано з посиланням на двійкові дані шрифту.

У вас може виникнути запитання. Чому ми повинні передавати параметр fileExtension в об’єкт FontDefiniton або FontFileDefinition, коли ми завжди передаємо параметр FontType який, здається, збігається за своїм значенням із fileExtension?

Проблема в тому, що FontType не завжди збігається зі значенням fileExtension. FontType визначає загальний формат шрифту, але не формат шрифту конкретного файлу. Деякі шрифти одного формату можуть мати різні формати файлів.

Наприклад, значення FontType.TTF визначає формат TrueType. Але в той же час TrueType включає кілька форматів шрифтів і файли шрифтів із розширеннями ttf, eot, ttc тощо. І якщо, наприклад, для шрифту формату EOT ми передамо в FontDefiniton лише значення FontType.TTF, то як цей об’єкт зрозуміє, що шрифт належить до формату EOT, а не до TTF?

Таким же чином значення FontType.Type1 є загальним визначенням для шрифтів цього формату. При цьому файли шрифтів формату Type1 мають розширення .pfa, .pfb, .afm, .pfm. Таким чином, ви не можете правильно визначити формат файлу шрифту, покладаючись лише на значення FonType.Type1. Отже, щоб правильно визначити формат шрифту, нам потрібно вказати параметр FontType зі значенням параметра fileExtension.

Нижче ви можете ознайомитися з прикладами ініціалізації об’єкта FontDefiniton і наступного завантаження шрифту для різних випадків.

У всіх випадках кінцевий результат завантаження шрифту поміщається в змінну типу Aspose.Font.Font. Цей тип є базовим класом шрифтів бібліотеки Aspose.Font, і об’єкти цього типу забезпечують загальну базову функціональність для роботи зі шрифтами. Завантаживши шрифт у цей об’єкт, ви зможете відтворити текст із цим шрифтом, отримати інформацію про кодування, показники шрифту тощо.

Приклади завантаження шрифтів

Розглянемо, наприклад, завантаження шрифту Montserrat з файлу C:\Windows\Fonts\Montserrat.ttf

Додайте наступні простори імен у заголовок файлу:

1using System;
2using Aspose.Font;
3using Aspose.Font.Sources;
4using System.IO;

Ви можете завантажити цей шрифт за допомогою об’єктів FontDefiniton і FontFileDefinition кількома різними способами:

Завантаження за допомогою об’єкта System.IO.FileInfo

Щоб виконати завантаження, виконайте наступне:

  1. Побудувати шлях до файлу.
  2. Ініціювати об’єкт FontDefiniton, передаючи TTF як значення FontType.
  3. Отримати автоматично розраховане значення fileExtension.
  4. Завантажте шрифт.
 1    // Construct path to the file
 2    string fontPath = @"C:\Windows\Fonts\Montserrat.ttf";
 3
 4    // Initialize FontDefinition object passing TTF as FontType value and using FontFileDefinition
 5    FontFileDefinition fileDef = new FontFileDefinition(new FileInfo(fontPath));
 6
 7    // Based on FileInfo object, fileExtension value is calculated automatically from FileInfo fields.
 8    FontDefinition fontDef = new FontDefinition(FontType.TTF, fileDef);
 9	
10    // Load font
11    Font font = Font.Open(fontDef);

Завантаження за допомогою об’єкта типу FileSystemStreamSource

Виконайте наступні кроки для виконання операції:

  1. Побудувати шлях до файлу.
  2. Ініціювати об’єкт FontDefiniton.
  3. Встановіть fileExtension на ttf.
  4. Завантажте шрифт.
 1    // Construct path to the file
 2    string fontPath = @"C:\Windows\Fonts\Montserrat.ttf";
 3
 4    // Initialize FontDefinition object passing TTF as FontType value and using FontFileDefinition
 5    FontFileDefinition fileDef = new FontFileDefinition("ttf", new FileSystemStreamSource(fontPath));
 6
 7    // Based on FileSystemStreamSource object, set fileExtension to "ttf"
 8    FontDefinition fontDef = new FontDefinition(FontType.TTF, fileDef);
 9		
10    // Load font   
11    Font font = Font.Open(fontDef);

Завантаження шрифту без об’єкта FontFileDefinition із передачею FileSystemStreamSource безпосередньо до FontDefinition

Для завантаження шрифту таким чином необхідно виконати наступні дії:

  1. Побудувати шлях до файлу.
  2. Ініціювати об’єкт FontDefiniton, передаючи TTF як значення FontType, ttf як значення fileExtension та об’єкт FileSystemStreamSource . Параметр fileExtension тут не є повторюваним значенням для параметра FontType.
  3. Завантажте шрифт.
 1    // Construct path to the file
 2    string fontPath = @"C:\Windows\Fonts\Montserrat.ttf";
 3
 4    // Initialize FontDefinition object passing TTF as FontType value, "ttf" as fileExtension value, 
 5    // and FileSystemStreamSource object. Parameter 'fileExtension' here is not duplicate value 
 6    // for parameter 'FontType' and it's needed for correct font format detection
 7    FontDefinition fontDef = new FontDefinition(FontType.TTF, "ttf", new FileSystemStreamSource(fontPath));
 8
 9    // Load font	
10    Font font = Font.Open(fontDef);

Завантаження шрифту за допомогою змінної типу byte[] та використання об’єкта типу ByteContentStreamSource

Щоб завантажити шрифт з байтового масиву, потрібно:

  1. Побудувати шлях до файлу.
  2. Завантажте двійкові дані шрифту в масив байтів
  3. Ініціалізуйте об’єкт FontDefiniton, передаючи TTF як значення FontType, ttf як значення fileExtension і ByteContentStreamSource об’єкт на основі масиву fontBytes.
  4. Завантажте шрифт.
 1    // Construct path to the file
 2    string fontPath = @"C:\Windows\Fonts\Montserrat.ttf";
 3
 4    // Load font binary data into byte array
 5    byte[] fontBytes;
 6
 7    // Initialize FontDefinition object  passing TTF as FontType value, "ttf" as fileExtension value, 
 8    // and ByteContentStreamSource object based on fontBytes array
 9    FontDefinition fontDef = new FontDefinition(FontType.TTF, "ttf", new ByteContentStreamSource(fontBytes));
10	
11    // Load font	
12    Font font = Font.Open(fontDef);

Щоб отримати більше прикладів використання Aspose.Font, перейдіть до рішення Aspose.Font.Examples.sln, у net-examples [Aspose.Font Documentation](https ://github.com/aspose-font/Aspose.Font-Documentation)

Якщо у вас залишилися проблеми чи запитання, ви можете опублікувати їх у розділі Aspose.Font.Product Family Безкоштовного форуму підтримки, і протягом кількох годин наша команда підтримки надішле прояснити все для вас.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.