Úvod

Embedded OpenType (EOT) je kompaktní formát písma, který byl původně vyvinut pro vkládání TrueType fontů do webových stránek. Soubor EOT obaluje font TTF nebo OTF s pevně velkou hlavičkou, která obsahuje pole metadat popisující rozměry písma, verzi, znakovou sadu a oprávnění k vkládání. Ačkoliv moderní vývoj webu se většinou přesunul na WOFF/WOFF2, soubory EOT stále cirkulují v legacy dokumentech a podnikových aplikacích.

Aspose.Font FOSS pro Python poskytuje přímý přístup k interním částem písma EOT prostřednictvím třídy EotFont a jejího doprovodného EotHeader. Můžete načíst soubor EOT pomocí FontLoader.open, přečíst pole hlavičky, procházet vnitřní TtfFont a výsledek serializovat zpět do bajtů nebo do souboru pomocí Font.save. Knihovna je publikována na PyPI jako aspose-font a je licencována pod licencí MIT License. Nemá žádné povinné komerční závislosti a funguje se standardním runtime Python 3.


Klíčové vlastnosti

Načítání EOT fontů

Použijte FontLoader.open k načtení EOT souboru z cesty nebo objektu bytes. Metoda vrací instanci EotFont, když detekuje podpis 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 čte příponu souboru a magické číslo hlavičky k automatické detekci formátu. Pro běžné soubory fontů není vyžadován argument font_type.


Čtení metadat EotHeader

EotFont vystavuje pole hlavičky přímo jako vlastnosti třídy. Tyto odpovídají polím definovaným ve specifikaci binárního formátu 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)

Třída EotFont vystavuje následující metadata hlavičky jako vlastnosti:

  • eot_version (int) — verze formátu EOT (např. 0x00020002)
  • flags (int) — příznaky oprávnění vložení
  • charset (int) — identifikátor znakové sady (0 = ANSI, 1 = DEFAULT)
  • italic (int) — příznak kurzívy (0 nebo 1)
  • weight (int) — tloušťka písma (např. 400 pro Regular, 700 pro Bold)
  • fs_type (int) — OS/2 fsType embedovací bity

Použijte flags a fs_type k určení, zda font povoluje podmnožkování nebo vkládání, což je relevantní při zpracování fontů pro distribuční pipeline.

Přístup k vnitřnímu TtfFont

Každý EotFont obaluje standardní font TrueType. Vlastnost inner_font vrací instanci TtfFont, což vám poskytuje přístup k úplné sadě tabulek 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)

Vlastnost inner_font na EotFont vrací zabalenou instanci TtfFont, což poskytuje přístup k úplné sadě tabulek TrueType, párům kerningu a kódovacím tabulkám.


Serializace EOT na bajty

EotSerializer.serialize převádí libovolný objekt Font na surový řetězec bajtů 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")

Převod TTF na EOT

EotSerializer.serialize přijímá libovolnou instanci Font, takže můžete načíst TTF a přímo jej serializovat do bajtů 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)

Metriky písma a páry kerningu

Objekt EotFont dědí plné rozhraní Font, takže metriky a kódování jsou k dispozici přímo, aniž by bylo nutné procházet 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}")

Rychlý start

Nainstalujte knihovnu:

.venv/bin/pip install aspose-font

Načtěte a prohlédněte písmo 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")

Podporované formáty

FormátPříponaČístZapsat
TTF.ttf✓—
OTF.otf✓—
EOT.eot✓—
CFF.cff✓—
TYPE1.pfb/.pfa✓—
WOFF.woff✓—
WOFF2.woff2✓—

Všechny výše uvedené formáty jsou podporovány pro načítání pomocí FontLoader.open. Zápis do konkrétního formátu používá Font.save nebo EotSerializer.serialize pro EOT.


Open Source a licencování

Aspose.Font FOSS pro Python je vydán pod licencí MIT. Můžete jej používat v osobních, komerčních i open-source projektech zdarma. Zdrojový kód je dostupný na GitHub a balíček je distribuován přes PyPI jako aspose-font.


Začínáme

Související zdroje