Ú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át | Přípona | Číst | Zapsat |
|---|---|---|---|
| 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.