Вступ
Вбудований OpenType (EOT) — це компактний формат шрифтів, спочатку розроблений для вбудовування TrueType шрифтів у веб-сторінки. Файл EOT обгортає шрифт TTF або OTF у заголовок фіксованого розміру, що містить поля метаданих, які описують розміри шрифту, версію, набір символів та дозволи на вбудовування. Хоча сучасна веб-розробка в значній мірі перейшла до WOFF/WOFF2, файли EOT залишаються в обігу в застарілих документах та корпоративних застосунках.
Aspose.Font FOSS для Python забезпечує прямий доступ до внутрішніх даних шрифту EOT через клас EotFont та його супутник EotHeader. Ви можете завантажити файл EOT за допомогою FontLoader.open, прочитати поля заголовка, пройтись по внутрішньому TtfFont і серіалізувати результат назад у байти або у файл, використовуючи Font.save. Бібліотека опублікована на PyPI як aspose-font і ліцензована під ліцензією MIT. Він не має обов’язкових комерційних залежностей і працює зі стандартним Python 3 runtime.
Ключові особливості
Завантаження шрифтів EOT
Використовуйте FontLoader.open для завантаження файлу EOT за шляхом або об’єктом bytes. Метод повертає екземпляр EotFont, коли виявляє підпис EOT:
from aspose_font import FontLoader, EotFont
font = FontLoader.open("fonts/sample.eot")
assert isinstance(font, EotFont)
print(font.font_name) # e.g. "Roboto"
print(font.font_family) # e.g. "Roboto"
print(font.num_glyphs) # number of glyphs in the inner font
FontLoader.open читає розширення файлу та магічний заголовок, щоб автоматично визначити формат. Для загальних файлів шрифтів аргумент font_type не потрібен.
Читання метаданих EotHeader
EotFont відкриває поля заголовка безпосередньо як властивості класу. Вони відповідають полям, визначеним у специфікації бінарного формату EOT:
from aspose_font import FontLoader, EotFont, EotSerializer
# Load EOT — FontLoader returns an EotFont instance for .eot files
loaded = FontLoader.open("fonts/sample.eot")
# Serialize back to bytes to confirm the font loaded correctly
eot_bytes = EotSerializer.serialize(loaded)
print(f"EOT data loaded: {len(eot_bytes)} bytes")
# Base Font properties work on any loaded font
print("Font name:", loaded.font_name)
print("Glyphs :", loaded.num_glyphs)
Клас EotFont відкриває наступні метадані заголовка як властивості:
eot_version(int) — версія формату EOT (наприклад,0x00020002)flags(int) — прапорці дозволу вбудовуванняcharset(int) — ідентифікатор набору символів (0 = ANSI, 1 = DEFAULT)italic(int) — прапорець курсиву (0 або 1)weight(int) — вага шрифту (наприклад, 400 для Regular, 700 для Bold)fs_type(int) — OS/2 біти вбудовування fsType
Використовуйте flags і fs_type, щоб визначити, чи дозволяє шрифт підмноження або вбудовування, що є важливим при обробці шрифтів для конвеєрів розповсюдження.
Доступ до внутрішнього TtfFont
Кожен EotFont обгортає стандартний шрифт TrueType. Властивість inner_font повертає екземпляр TtfFont, надаючи доступ до повного набору таблиць TrueType:
from aspose_font import FontLoader
loaded = FontLoader.open("fonts/sample.eot")
# Metrics are accessible directly from the loaded font
metrics = loaded.metrics
print("Units per em :", metrics.units_per_em)
print("Ascender :", metrics.ascender)
print("Descender :", metrics.descender)
print("Line gap :", metrics.line_gap)
Властивість inner_font у EotFont повертає обгорнутий екземпляр TtfFont, забезпечуючи доступ до повного набору таблиць TrueType, пар кернінгу та таблиць кодування.
Серіалізація EOT у байти
EotSerializer.serialize перетворює будь-який об’єкт Font у необроблений байтовий рядок EOT:
from aspose_font import FontLoader, EotFont, EotSerializer
font = FontLoader.open("fonts/sample.eot")
assert isinstance(font, EotFont)
eot_bytes = EotSerializer.serialize(font)
with open("output/sample_copy.eot", "wb") as fh:
fh.write(eot_bytes)
print(f"Serialized {len(eot_bytes)} bytes")
Перетворення TTF у EOT
EotSerializer.serialize приймає будь-який екземпляр Font, тому ви можете завантажити TTF і серіалізувати його безпосередньо у байти EOT:
from aspose_font import FontLoader, EotFont, EotSerializer
ttf = FontLoader.open("fonts/Roboto-Regular.ttf")
eot_bytes = EotSerializer.serialize(ttf)
with open("output/Roboto-Regular.eot", "wb") as fh:
fh.write(eot_bytes)
reloaded = FontLoader.open("output/Roboto-Regular.eot")
assert isinstance(reloaded, EotFont)
print("Converted and verified:", reloaded.font_name)
Метрики шрифту та керн-пари
Об’єкт EotFont успадковує повний інтерфейс Font, тому метрики та кодування доступні безпосередньо, минаючи inner_font:
from aspose_font import FontLoader
loaded = FontLoader.open("fonts/sample.eot")
metrics = loaded.metrics
print(f"Ascender : {metrics.ascender}")
print(f"Descender: {metrics.descender}")
print(f"Line gap : {metrics.line_gap}")
print(f"Underline: {metrics.underline_position}")
for pair in loaded.get_kern_pairs():
print(f" Kern: {pair}")
Швидкий старт
Встановіть бібліотеку:
.venv/bin/pip install aspose-font
Завантажте та проаналізуйте шрифт EOT:
from aspose_font import FontLoader, EotFont, EotSerializer
loaded = FontLoader.open("sample.eot")
# Base font info
print(f"Font name : {loaded.font_name}")
print(f"Glyphs : {loaded.num_glyphs}")
# Metrics
metrics = loaded.metrics
print(f"UPM : {metrics.units_per_em}")
print(f"Ascender : {metrics.ascender}")
# Serialize the loaded font back to EOT bytes
eot_bytes = EotSerializer.serialize(loaded)
print(f"Serialized: {len(eot_bytes)} bytes")
Підтримувані формати
| Формат | Розширення | Читати | Запис |
|---|---|---|---|
| TTF | .ttf | ✓ | — |
| OTF | .otf | ✓ | — |
| EOT | .eot | ✓ | — |
| CFF | .cff | ✓ | — |
| TYPE1 | .pfb/.pfa | ✓ | — |
| WOFF | .woff | ✓ | — |
| WOFF2 | .woff2 | ✓ | — |
Усі зазначені вище формати підтримуються для завантаження через FontLoader.open. Запис у конкретний формат використовує Font.save або EotSerializer.serialize для EOT.
Відкритий код та ліцензування
Aspose.Font FOSS для Python випущено під ліцензією MIT. Ви можете використовувати його в особистих, комерційних та open-source проєктах безкоштовно. Вихідний код доступний на GitHub, а пакет розповсюджується через PyPI як aspose-font.