Введение
TrueType шрифты (.ttf) и их надмножество OpenType (.otf) являются доминирующими форматами шрифтов в современных операционных системах. Оба формата используют одну и ту же двоичную структуру таблиц, основанную на спецификации OpenType. Aspose.Font FOSS для Python раскрывает эту структуру через TtfFont, предоставляя прямой доступ к отдельным таблицам OpenType, данным о керн-парах, осям переменных шрифтов и контурам глифов.
Класс TtfFont расширяет базовый класс Font методами, специфичными для TTF, включая get_blob, get_table_bytes, set_table_bytes и instantiate для блокировки осей переменного шрифта. Свойство TtfTableSet (ttf_tables) предоставляет типизированный доступ к наиболее часто используемым таблицам OpenType: head, hhea, maxp, os2, name, post.
Библиотека опубликована на PyPI как aspose-font и лицензирована по лицензии MIT. У неё нет обязательных коммерческих зависимостей.
Ключевые возможности
Загрузка шрифтов TTF и OTF
Используйте FontLoader.open для загрузки любого TrueType или OpenType файла шрифта:
from aspose_font import FontLoader
loaded = FontLoader.open("fonts/Roboto-Regular.ttf")
print(loaded.font_name)
print(loaded.font_family)
print(loaded.font_style)
print(loaded.num_glyphs)
FontLoader.open определяет формат шрифта из заголовка файла. Поддерживаются как .ttf (TrueType), так и .otf (OpenType CFF) файлы, и оба возвращают экземпляр TtfFont.
Доступ к таблицам OpenType через TtfTableSet
Свойство ttf_tables возвращает TtfTableSet с типизированными аксессорами для общих таблиц OpenType. Каждое свойство возвращает объект таблицы или None, если он отсутствует:
Свойство ttf_tables в TtfFont возвращает экземпляр TtfTableSet. Доступные аксессоры таблиц:
head—HeadTable | Nonehhea—HheaTable | Nonemaxp—MaxpTable | Noneos2—Os2Table | Nonename—NameTable | Nonepost—PostTable | None
Каждое свойство возвращает объект таблицы или None, если этой таблицы нет в файле шрифта. Обращайтесь к свойствам TtfTableSet, чтобы проверить наличие конкретных таблиц перед их чтением. Для таблиц, не покрытых именованными аксессорами, используйте TtfTableSet.get_raw(tag) для получения необработанных байтов по четырёхсимвольному тегу OpenType.
Чтение необработанных байтов таблицы
get_table_bytes(tag) возвращает необработанные байты любой таблицы OpenType. Используйте get_blob(tag) для версии, безопасной к None, которая возвращает None, когда таблица отсутствует:
TtfFont предоставляет два метода доступа к необработанным таблицам:
get_table_bytes(tag) -> bytes— возвращает необработанные байты именованной таблицы (вызывает исключение, если отсутствует)get_blob(tag) -> bytes | None— возвращаетNone, если таблица отсутствует (безопасный вариант)
Оба метода принимают четырехсимвольный тег таблицы OpenType, например "cmap", "GDEF" или "GPOS". Используйте get_blob, когда таблица является необязательной, чтобы вы могли проверить наличие None перед обработкой.
Керн-пары
get_kern_pairs() возвращает все керн-пары, закодированные в шрифте. Каждый KernPair имеет left (GlyphId), right (GlyphId) и value (int в единицах шрифта):
from aspose_font import FontLoader
loaded = FontLoader.open("fonts/Roboto-Regular.ttf")
pairs = loaded.get_kern_pairs()
print(f"Kern pairs: {len(pairs)}")
for pair in pairs[:5]:
print(f" Left: {pair.left} Right: {pair.right} Value: {pair.value}")
Метрики шрифта
Стандартные метрики доступны через свойство metrics:
from aspose_font import FontLoader
loaded = FontLoader.open("fonts/Roboto-Regular.ttf")
metrics = loaded.metrics
print(f"Units per em : {metrics.units_per_em}")
print(f"Ascender : {metrics.ascender}")
print(f"Descender : {metrics.descender}")
print(f"Line gap : {metrics.line_gap}")
print(f"Underline pos : {metrics.underline_position}")
Поддержка вариабельных шрифтов
Для вариабельных шрифтов TtfFont предоставляет is_variable, variable_axes и named_instances. Используйте get_axis(tag), чтобы получить конкретную ось по её четырёхбуквенному тегу:
from aspose_font import FontLoader
loaded = FontLoader.open("fonts/RobotoFlex.ttf")
print(f"Is variable: {loaded.is_variable}")
print(f"Axes : {len(loaded.variable_axes)}")
Метод get_axis(tag) в TtfFont извлекает VariableAxis по его четырёхбуквенному тегу (например, "wght" для веса, "wdth" для ширины). Он возвращает None, если ось отсутствует в таблице fvar шрифта.
Преобразование шрифтов
to_bytes(font_type) преобразует шрифт в другой формат. Используйте перечисление FontType, чтобы указать цель:
from aspose_font import FontLoader, FontType
loaded = FontLoader.open("fonts/Roboto-Regular.ttf")
ttf_bytes = loaded.to_bytes(FontType.TTF)
with open("output/Roboto-copy.ttf", "wb") as fh:
fh.write(ttf_bytes)
print(f"Serialized: {len(ttf_bytes)} bytes")
Быстрый старт
Установите библиотеку:
.venv/bin/pip install aspose-font
Загрузите шрифт TTF и проанализируйте его:
from aspose_font import FontLoader, FontType
loaded = FontLoader.open("Roboto-Regular.ttf")
print(f"Font name : {loaded.font_name}")
print(f"Family : {loaded.font_family}")
print(f"Glyphs : {loaded.num_glyphs}")
print(f"Variable : {loaded.is_variable}")
metrics = loaded.metrics
print(f"UPM : {metrics.units_per_em}")
ttf_bytes = loaded.to_bytes(FontType.TTF)
print(f"Serialized: {len(ttf_bytes)} bytes")
Поддерживаемые форматы
| Формат | Расширение | Чтение | Запись |
|---|---|---|---|
| TTF | .ttf | ✓ | — |
| OTF | .otf | ✓ | — |
| EOT | .eot | ✓ | — |
| CFF | .cff | ✓ | — |
| TYPE1 | .pfb/.pfa | ✓ | — |
| WOFF | .woff | ✓ | — |
| WOFF2 | .woff2 | ✓ | — |
Все форматы загружаются через FontLoader.open. Шрифты TTF/OTF возвращают экземпляр TtfFont.
Открытый исходный код и лицензирование
Aspose.Font FOSS для Python выпускается под лицензией MIT. Вы можете использовать его в личных, коммерческих и открытых проектах бесплатно. Исходный код доступен на GitHub, а пакет распространяется через PyPI как aspose-font.