Основное управление шрифтами
Основное управление шрифтами
Это руководство показывает, как загружать шрифты из файловых путей или массивов байтов, читать свойства метаданных, сопоставлять кодовые точки 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 извлекает объекты глифов по ID, 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) | Получить глиф по ID |
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) | Высокоуровневый помощник, оборачивающий запросы осей и экземпляров |