Introduzione
I file dei font sono strutturati attorno a tabelle — ogni tabella memorizza una specifica categoria di dati, come contorni dei glifi, mappature dei caratteri, metadati di denominazione o metriche orizzontali. Comprendere e accedere a queste tabelle è essenziale per attività come l’analisi dei font, la modifica dei metadati, il controllo di qualità e la conversione dei formati.
Aspose.Font FOSS per Python (aspose-font) ti offre accesso diretto all’intero set di tabelle OpenType e TrueType tramite un Python API pulito. La libreria è rilasciata sotto licenza MIT senza dipendenze esterne, così puoi integrarla in qualsiasi progetto senza preoccupazioni di licenza.
Questo post esamina le classi chiave delle tabelle disponibili nella libreria — dalla lettura dei metadati dell’intestazione all’ispezione dei dati dei glifi e alla modifica dei record dei nomi — tutto supportato dal contenitore TtfTableSet su TtfFont.
Caratteristiche principali
Caricamento di un font e accesso alle tabelle
Ogni font caricato con FontLoader espone le sue tabelle analizzate tramite la proprietà ttf_tables su TtfFont. L’oggetto TtfTableSet fornisce accesso tipizzato a ciascuna tabella standard, oltre all’accesso ai byte grezzi tramite get_raw() per tabelle personalizzate o non riconosciute.
import aspose_font
font = aspose_font.FontLoader.open("MyFont.ttf")
tables = font.ttf_tables
# Typed table access
head = tables.head
name = tables.name
cmap = tables.cmap
# Raw bytes for any table tag
raw_os2 = tables.get_raw("OS/2")
Lettura della tabella Head
Il HeadTable memorizza i parametri fondamentali a livello di font: unità per em, revisione, riquadro di delimitazione, data di creazione e flag di stile. Questi valori sono critici per i motori di rendering e i validatori di font.
import aspose_font
font = aspose_font.FontLoader.open("MyFont.ttf")
head = font.ttf_tables.head
print(f"Units per em: {head.units_per_em}")
print(f"Revision: {head.font_revision}")
print(f"Bounding box: ({head.x_min}, {head.y_min}) to ({head.x_max}, {head.y_max})")
print(f"Mac style flags: {head.mac_style}")
print(f"Glyph data format: {head.glyph_data_format}")
Lavorare con la tabella Name
Il NameTable contiene tutti i metadati leggibili dall’uomo: nome della famiglia di font, stile, copyright, licenza, designer e descrizione. È possibile interrogare i record per ID nome, recuperare i nomi localizzati o modificare le voci per il rebranding.
import aspose_font
font = aspose_font.FontLoader.open("MyFont.ttf")
name_table = font.ttf_tables.name
# Read the font family name (name ID 1)
family = name_table.best_name(1, ["en"])
print(f"Family: {family}")
# List all localized versions of the full name (name ID 4)
localized = name_table.localized_names(4)
for lang, value in localized.items():
print(f" {lang}: {value}")
# Replace the font family name
name_table.replace_name(1, "MyCustomFamily")
Ispezione della tabella CMap
Il CmapTable mappa i punti di codice Unicode agli ID glifo. Può contenere più sottotabelle per diverse combinazioni di piattaforma e codifica. Usa best_subtable() per ottenere la mappatura più adatta al tuo caso d’uso.
import aspose_font
font = aspose_font.FontLoader.open("MyFont.ttf")
cmap = font.ttf_tables.cmap
# Get the best Unicode subtable
subtable = cmap.best_subtable()
print(f"Platform: {subtable.platform_id}, Encoding: {subtable.encoding_id}")
# Look up the glyph ID for 'A'
gid = subtable.get_gid(ord("A"))
print(f"Glyph ID for 'A': {gid}")
Lettura di OS/2 e metriche orizzontali
Il Os2Table fornisce OS/2 e metriche specifiche per Windows, inclusi ascendente/discendente tipografico, flag di incorporamento e classificazione Panose. Il HheaTable e il HmtxTable forniscono metriche di layout orizzontale usate per la formattazione del testo.
import aspose_font
font = aspose_font.FontLoader.open("MyFont.ttf")
os2 = font.ttf_tables.os2
hhea = font.ttf_tables.hhea
print(f"Typo ascender: {os2.s_typo_ascender}")
print(f"Typo descender: {os2.s_typo_descender}")
print(f"Embedding flags (fsType): {os2.fs_type}")
print(f"Panose: {os2.panose.hex()}")
print(f"Hhea ascender: {hhea.ascender}")
print(f"Max advance width: {hhea.advance_width_max}")
print(f"Number of hmetrics: {hhea.number_of_hmetrics}")
Kerning e Dati dei Glifi
Il KernTable memorizza le coppie di kerning per le regolazioni della spaziatura orizzontale. Il GlyfTable contiene i dati effettivi del contorno dei glifi per i font TrueType. Puoi anche usare PostTable per risolvere i nomi dei glifi.
import aspose_font
font = aspose_font.FontLoader.open("MyFont.ttf")
# Kerning lookup
kern = font.ttf_tables.kern
if kern:
pairs = kern.pairs
print(f"Total kern pairs: {len(pairs)}")
# Look up a specific pair by glyph IDs
adjustment = kern.get(36, 57)
print(f"Kern adjustment: {adjustment}")
# Glyph name from post table
post = font.ttf_tables.post
if post:
glyph_name = post.glyph_name(0)
print(f"Glyph 0 name: {glyph_name}")
Avvio Rapido
git clone https://github.com/aspose-font-foss/Aspose.Font-FOSS-for-Python.git
cd Aspose.Font-FOSS-for-Python
pip install -e .import aspose_font
# Load any TTF or OTF font
font = aspose_font.FontLoader.open("MyFont.ttf")
tables = font.ttf_tables
# Print basic table info
print(f"Font: {font.font_name}")
print(f"Family: {font.font_family}")
print(f"Glyphs: {font.num_glyphs}")
print(f"Units/em: {tables.head.units_per_em}")
# Read name table entries
name_table = tables.name
for name_id in [0, 1, 2, 4, 5, 6]:
value = name_table.best_name(name_id, ["en"])
if value:
print(f" Name ID {name_id}: {value}")
# Check character coverage
cmap = tables.cmap
subtable = cmap.best_subtable()
for char in "ABCabc012":
gid = subtable.get_gid(ord(char))
print(f" '{char}' -> glyph {gid}")
Formati supportati
| Formato | Estensione | Leggi | Scrivi |
|---|---|---|---|
| TTF | .ttf | ✓ | ✓ |
| OTF | .otf | ✓ | ✓ |
| CFF | .cff | ✓ | ✓ |
| WOFF | .woff | ✓ | ✓ |
| WOFF2 | .woff2 | ✓ | ✓ |
| EOT | .eot | ✓ | — |
| TYPE1 | .pfb/.pfa | ✓ | — |
Open Source & Licenze
Aspose.Font FOSS per Python è rilasciato sotto licenza MIT. Il codice sorgente è disponibile su GitHub e il pacchetto è pubblicato su PyPI come aspose-font. Sei libero di usarlo, modificarlo e distribuirlo sia in progetti personali che commerciali senza restrizioni.