Як завантажити шрифти? | Рішення API для .NET
Огляд
Щоб відповісти на питання, як завантажувати шрифти, спочатку нам потрібно дізнатися, що будь-який шрифт фізично є масивом байтів, в якому дані представлені в певному форматі. Тому для правильного завантаження шрифту необхідно знати два ключових параметри:
- Формат шрифту. Шрифти можуть мати різні формати, наприклад
TrueType
,Type1
тощо. - Сховище, де зберігаються двійкові дані, які представляють шрифт. Кожен шрифт представлено як двійкові дані, але спосіб зберігання цих даних може відрізнятися. У більшості випадків шрифт зберігається у вигляді файлу на жорсткому диску. Але іноді двійкові дані шрифту можна помістити в інший файл, який сам по собі не є шрифтом. Наприклад, файли, створені Microsoft Word або Adobe Acrobat. Це файли з розширеннями
.docx
,.pdf
. Вони можуть містити різні шрифти.
Об’єкти та параметри, необхідні для завантаження шрифту
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 нададуть доступ до потоку байтів. , пов’язані з потрібним шрифтом.
Опишемо ці об’єкти:
- Клас StreamSource. Цей абстрактний базовий клас визначає властивості та методи, які надають доступ до потоку байтів шрифту.
- FileSystemStreamSource - призначений для надання доступу до потоку на основі файлової системи. Властивість FileName повертає назву файлу шрифту. Метод GetFontStream() повертає потік байтів, пов’язаний із цим файлом.
- ByteContentStreamSource - забезпечує доступ до потоку на основі байтового масиву.
Метод GetFontStream() цього класу повертає потік, пов’язаний з даними двійкового шрифту. Властивість Offset вказує на позицію в цьому потоці, звідки ми повинні почати читати дані.
- Два найбільш часто використовувані класи, успадковані від базового StreamSource:
Як ініціювати операцію?
Ось приклади запуску операції.1. Припустімо, що шрифт знаходиться у файлі під назвою Lora.ttf. У цьому випадку, щоб отримати доступ до потоку байтів цього шрифту, нам потрібно створити об’єкт типу FileSystemStreamSource за допомогою цього єдиного конструктора:
1
2 FileSystemStreamSource fontSource = new FileSystemStreamSource("Lora.ttf");
- Якщо двійкові дані шрифту розташовані в двійковому масиві, визначеному змінною byte [] fontArray, тоді об’єкт типу ByteContentStreamSource забезпечить доступ до потоку даних шрифту на основі змінної fontArray.
Щоб отримати доступ до потоку байтів шрифтів, нам потрібно створити об’єкт типу ByteContentStreamSource, щоб отримати доступ до потоку, пов’язаного з масивом байтів шрифтів, використовуючи такий код:
1
2 ByteContentStreamSource fontSource = new ByteContentStreamSource(fontArray);
Отже, щоб надати доступ до двійкових даних шрифту, використовуйте об’єкти, успадковані від базового класу StreamSource. Далі ми будемо називати такі об’єкти джерелами потоку шрифтів.
Об’єкт FontFileDefinition
Більшість фасадів розташовані в звичайних файлах, але в той же час частина шрифтів може мати різні джерела даних. Щоб об’єднати в один об’єкт терміни файл і двійковий потік шрифту, бібліотека Aspose.Font надає спеціальний об’єкт FontFileDefinition.
Цей об’єкт має такі властивості:
- FileName - ім’я файлу шрифту.
- FileExtension - розширення файлу шрифту.
- StreamSource - джерело потоку шрифтів.
- Offset - зміщення всередині потоку байтів шрифту.
Найпростішим і одним з найбільш часто використовуваних конструкторів цього об’єкта є конструктор з такою сигнатурою: 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 Format | woff |
Web Open Font Format version 2.0 | woff2 |
Embedded OpenType | eot |
Adobe Type 1 font | pfa , pfb , afm , pfm |
Compact Font Format | cff , can be null |
Якщо дані шрифту починаються не з позиції 0 потоку байтів, використовуйте такий конструктор із параметром offset:
1
2 FontFileDefinition(string fileExtension, StreamSource streamSource, long offset).
Як ініціювати об’єкт FontDefinition?
Тепер, коли ви маєте уявлення про об’єкти, успадковані від класу StreamSource і які надають доступ до потоку байтів шрифтів, а також про об’єкт FontFileDefinition, ми пояснимо, ви дізнаєтесь, як правильно ініціювати об’єкт FontDefiniton із цими об’єктами для різних ситуацій.
Об’єкт FontDefiniton надає вам багато перевантажених конструкторів. Спільною рисою всіх існуючих конструкторів є параметр FontType. Він описує тип формату шрифту.
Як було зазначено раніше, окрім значення FontType, об’єкт FontDefiniton має бути ініціалізовано з посиланням на двійкові дані шрифту.
- назва шрифту;
- розширення файлу;
- об’єкт типу StreamSource;
- об’єкт типу FontFileDefinition. У цьому випадку можна використовувати наступні параметри конструкторів 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
Щоб виконати завантаження, виконайте наступне:
- Побудувати шлях до файлу.
- Ініціювати об’єкт
FontDefiniton, передаючи
TTF
як значення FontType. - Отримати автоматично розраховане значення fileExtension.
- Завантажте шрифт.
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
Виконайте наступні кроки для виконання операції:
- Побудувати шлях до файлу.
- Ініціювати об’єкт FontDefiniton.
- Встановіть
fileExtension на
ttf
. - Завантажте шрифт.
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
Для завантаження шрифту таким чином необхідно виконати наступні дії:
- Побудувати шлях до файлу.
- Ініціювати об’єкт
FontDefiniton, передаючи
TTF
як значення FontType,ttf
як значення fileExtension та об’єкт FileSystemStreamSource . Параметр fileExtension тут не є повторюваним значенням для параметра FontType. - Завантажте шрифт.
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
Щоб завантажити шрифт з байтового масиву, потрібно:
- Побудувати шлях до файлу.
- Завантажте двійкові дані шрифту в масив байтів
- Ініціалізуйте об’єкт
FontDefiniton, передаючи
TTF
як значення FontType,ttf
як значення fileExtension і ByteContentStreamSource об’єкт на основі масиву fontBytes. - Завантажте шрифт.
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 Безкоштовного форуму підтримки, і протягом кількох годин наша команда підтримки надішле прояснити все для вас.