Вступ

Вбудований 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.


Початок роботи

Пов’язані ресурси