Introduzione

I font TrueType (.ttf) e il loro superset OpenType (.otf) sono i formati di font dominanti nei moderni sistemi operativi. Entrambi i formati condividono la stessa struttura di tabelle binarie basata sulla specifica OpenType. Aspose.Font FOSS per Python espone questa struttura tramite TtfFont, fornendo accesso diretto alle singole tabelle OpenType, ai dati delle coppie di kern, agli assi dei font variabili e ai contorni dei glifi.

La classe TtfFont estende la classe base Font con metodi specifici TTF includendo get_blob, get_table_bytes, set_table_bytes e instantiate per il blocco degli assi dei font variabili. La proprietà TtfTableSet (ttf_tables) fornisce un accesso tipizzato alle tabelle OpenType più comuni: head, hhea, maxp, os2, name, post.

La libreria è pubblicata su PyPI come aspose-font ed è rilasciata sotto la licenza MIT. Non ha dipendenze commerciali obbligatorie.


Caratteristiche principali

Caricamento di font TTF e OTF

Usa FontLoader.open per caricare qualsiasi file di font TrueType o 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 rileva il formato del font dall’intestazione del file. Sia i file .ttf (TrueType) sia i file .otf (OpenType CFF) sono supportati e entrambi restituiscono un’istanza TtfFont.


Accesso alle tabelle OpenType tramite TtfTableSet

La proprietà ttf_tables restituisce un TtfTableSet con accessor tipizzati per le tabelle comuni OpenType. Ogni proprietà restituisce l’oggetto tabella o None se assente:

La proprietà ttf_tables su TtfFont restituisce un’istanza TtfTableSet. Accessor di tabella disponibili:

  • head — HeadTable | None
  • hhea — HheaTable | None
  • maxp — MaxpTable | None
  • os2 — Os2Table | None
  • name — NameTable | None
  • post — PostTable | None

Ogni proprietà restituisce l’oggetto tabella o None se quella tabella non è presente nel file del font. Accedi alle proprietà TtfTableSet per verificare la presenza di tabelle specifiche prima di leggerle. Per le tabelle non coperte da accessor nominati, usa TtfTableSet.get_raw(tag) per recuperare i byte grezzi mediante il tag a quattro caratteri OpenType.


Lettura dei byte grezzi della tabella

get_table_bytes(tag) restituisce i byte grezzi per qualsiasi tabella OpenType. Usa get_blob(tag) per una variante sicura per None che restituisce None quando la tabella è assente:

TtfFont fornisce due metodi per l’accesso grezzo alle tabelle:

  • get_table_bytes(tag) -> bytes — restituisce i byte grezzi per una tabella nominata (solleva un’eccezione se assente)
  • get_blob(tag) -> bytes | None — restituisce None se la tabella è assente (variante sicura)

Entrambi i metodi accettano un tag di tabella a quattro caratteri OpenType come "cmap", "GDEF" o "GPOS". Usa get_blob quando una tabella è opzionale così puoi verificare None prima dell’elaborazione.


Coppie di kern

get_kern_pairs() restituisce tutte le coppie di kern codificate nel font. Ogni KernPair ha left (GlyphId), right (GlyphId) e value (int in unità del font):

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}")

Metriche del font

Le metriche standard sono accessibili tramite la proprietà 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}")

Supporto per i font variabili

Per i font variabili, TtfFont espone is_variable, variable_axes e named_instances. Usa get_axis(tag) per recuperare un asse specifico tramite il suo tag a quattro lettere:

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)}")

Il metodo get_axis(tag) su TtfFont recupera un VariableAxis tramite il suo tag a quattro lettere (ad es. "wght" per il peso, "wdth" per la larghezza). Restituisce None se l’asse non è presente nella tabella fvar del font.


Conversione dei Font

to_bytes(font_type) converte il font in un formato diverso. Usa l’enum FontType per specificare la destinazione:

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")

Avvio rapido

Installa la libreria:

.venv/bin/pip install aspose-font

Carica un font TTF e ispezionalo:

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")

Formati supportati

FormatoEstensioneLeggiScrivi
TTF.ttf✓—
OTF.otf✓—
EOT.eot✓—
CFF.cff✓—
TYPE1.pfb/.pfa✓—
WOFF.woff✓—
WOFF2.woff2✓—

Tutti i formati vengono caricati tramite FontLoader.open. I font TTF/OTF restituiscono un’istanza TtfFont.


Open Source & Licenze

Aspose.Font FOSS for Python è rilasciato sotto la Licenza MIT. Puoi usarlo in progetti personali, commerciali e open-source senza alcun costo. Il codice sorgente è disponibile su GitHub e il pacchetto è distribuito tramite PyPI come aspose-font.


Guida introduttiva

Risorse correlate