Основне керування шрифтами
Основне керування шрифтами
У цьому посібнику показано, як завантажувати шрифти за шляхами до файлів або масивами байтів, читати властивості метаданих, відображати Unicode-коди у ідентифікатори гліфів, отримувати гліфи та працювати з змінними осями шрифту та іменованими інстанціями.
FontLoader є основною точкою входу для всіх операцій завантаження шрифтів. Після завантаження шрифту базовий клас Font забезпечує доступ до метаданих, кодування, доступу до гліфів та метрик без необхідності парсингу бінарних таблиць.
Завантаження шрифтів
FontLoader.open(source, font_type, collection_index) завантажує шрифт за шляхом до файлу з автоматичним визначенням формату. FontLoader.load(source, font_type, collection_index) приймає необроблені байти для робочих процесів у пам’яті або через мережу.
from aspose_font import FontLoader
# From a file path — format auto-detected
font = FontLoader.open("Roboto-Regular.ttf")
# From raw bytes — useful for in-memory or network workflows
with open("OpenSans-Regular.otf", "rb") as f:
font = FontLoader.load(f.read())Читання метаданих шрифту
Після завантаження об’єкт Font відкриває властивості font_name, font_family, font_style і num_glyphs для швидкого перегляду без ручного парсингу таблиць.
from aspose_font import FontLoader
font = FontLoader.open("MyFont.ttf")
print(font.font_name) # full PostScript name
print(font.font_family) # family name
print(font.font_style) # style name e.g. "Regular", "Bold"
print(font.num_glyphs) # total glyph countКодування гліфів
FontEncoding відображає Unicode-коди в ідентифікатори гліфів. Використовуйте unicode_to_gid(cp) для розв’язання окремого коду, або get_all_codepoints() для перерахунку всіх відображених кодів у шрифті.
from aspose_font import FontLoader
font = FontLoader.open("OpenSans-Regular.otf")
# Map a single code point
gid = font.encoding.unicode_to_gid(0x41) # GID for 'A'
# Enumerate all mapped code points
all_cps = font.encoding.get_all_codepoints()
print(f"Font covers {len(all_cps)} Unicode code points")Доступ до гліфів
GlyphAccessor отримує об’єкти гліфів за ідентифікатором, Unicode або текстовим рядком.
from aspose_font import FontLoader
font = FontLoader.open("OpenSans-Regular.otf")
glyph = font.glyph_accessor.get_glyph_by_id(gid)
glyph_a = font.glyph_accessor.get_glyph_by_unicode(0x41)
glyphs = font.glyph_accessor.get_glyphs_for_text("Hello")
all_ids = font.glyph_accessor.get_all_glyph_ids()Змінні шрифти
Для змінних шрифтів (які містять таблицю fvar), TtfFont безпосередньо надає визначення осей та іменовані інстанси.
from aspose_font import FontLoader
from aspose_font import TtfFont
loaded = FontLoader.load("Roboto-VariableFont_wdth,wght.ttf")
ttf: TtfFont = loaded.font
# Check if the font is variable
if ttf.is_variable:
# List all variation axes
for axis in ttf.variable_axes:
print(f"{axis.tag} range: {axis.min_value}..{axis.max_value} default: {axis.default_value}")
# Look up a single axis by tag
wght = ttf.get_axis("wght")
if wght:
print(f"Weight axis: {wght.min_value}..{wght.max_value}")
# Enumerate named instances (e.g. Bold, Condensed)
for inst in ttf.named_instances:
print(f"Instance: name_id={inst.name_id} coordinates={inst.coordinates}")Для більш високорівневих процесів інстансингу, SmartInstancer обгортає перерахування осей та розв’язання іменованих інстансів в один об’єкт:
from aspose_font import FontLoader
from aspose_font import SmartInstancer
loaded = FontLoader.load("Roboto-VariableFont_wdth,wght.ttf")
instancer = SmartInstancer(loaded.font)
print(f"Axes: {[a.tag for a in instancer.axes]}")
print(f"Named instances: {len(instancer.named_instances)}")Поради та кращі практики
- Кешуйте завантажені
Fontоб’єкти під час багаторазової обробки одного і того ж файлу шрифту - Використовуйте
FontLoader.load(bytes)для мережевих або баз даних у робочих процесах, щоб уникнути тимчасових файлів - Перевірте
num_glyphsперед створенням підмножини, щоб оцінити покриття після підмножини get_all_glyph_ids()корисний для ітерації повного набору гліфів
Поширені проблеми
| Проблема | Причина | Виправлення |
|---|---|---|
UnsupportedFontFormatException | Формат файлу не розпізнано | Перевірте, що файл є дійсним TTF/OTF/CFF/WOFF/WOFF2/EOT/Type1 |
FontParseException | Некоректні двійкові дані | Перевірте файл шрифту за допомогою лінтера перед завантаженням |
GlyphNotFoundException | GID поза діапазоном | Перевірте num_glyphs перед доступом за ID |
FAQ
Чи підтримує FontLoader WOFF2?
Так. FontLoader.open() і FontLoader.load() обидва приймають файли WOFF2 і автоматично визначають формат.
Чи можу я завантажити шрифт з URL?
Не безпосередньо. Завантажте байти шрифту за допомогою urllib або requests і передайте їх у FontLoader.load(bytes).
Чи є завантаження потокобезпечним?
Кожен виклик FontLoader.open() повертає незалежний об’єкт Font. Конкурентні виклики на різних об’єктах безпечні.
API Reference Підсумок
| Клас / Метод | Опис |
|---|---|
FontLoader.open(path) | Завантажити шрифт за шляхом до файлу |
FontLoader.load(data) | Завантажити шрифт з необроблених байтів |
Font.font_name | Повна назва шрифту PostScript |
Font.font_family | Назва сімейства шрифтів |
Font.font_style | Назва стилю шрифту |
Font.num_glyphs | Загальна кількість гліфів |
FontEncoding.unicode_to_gid(cp) | Зіставити кодову точку Unicode з ідентифікатором гліфа |
FontEncoding.get_all_codepoints() | Усі кодові точки Unicode з мапуванням гліфів |
GlyphAccessor.get_glyph_by_id(gid) | Отримати гліф за ідентифікатором |
GlyphAccessor.get_glyph_by_unicode(cp) | Отримати гліф за Unicode-кодовою точкою |
GlyphAccessor.get_glyphs_for_text(text) | Отримати гліфи для текстового рядка |
GlyphAccessor.get_all_glyph_ids() | Перерахувати всі ID гліфів у шрифті |
TtfFont.is_variable | Чи містить шрифт дані змінного шрифту |
TtfFont.variable_axes | Список об’єктів VariableAxis для кожної осі варіації |
TtfFont.get_axis(tag) | Знайдіть одну вісь за її чотирьохсимвольним тегом |
TtfFont.named_instances | Названі інстанції, визначені в таблиці fvar шрифту |
SmartInstancer(font) | Високорівневий допоміжний інструмент, що обгортає запити осей і інстанцій |