Come lavorare con i font WOFF in Python
Questa guida mostra come caricare, ispezionare e convertire i font web WOFF e WOFF2 usando Aspose.Font FOSS per Python. WOFF (Web Open Font Format) è lo standard per la distribuzione dei font sul web. WOFF 1 utilizza la compressione zlib e WOFF 2 utilizza la compressione Brotli, avvolgendo entrambi un font TrueType o CFF sottostante. Aspose.Font FOSS carica entrambi i formati ed espone i dati del font interno tramite un API pulito.
Guida passo-passo
Passo 1: Installa il pacchetto
Installa il pacchetto Aspose.Font FOSS usando il comando qui sotto:
git clone https://github.com/aspose-font-foss/Aspose.Font-FOSS-for-Python.git
cd Aspose.Font-FOSS-for-Python
pip install -e .Passo 2: Importa le classi richieste
Importa FontLoader, FontConverter e FontType per caricare e convertire i font WOFF:
from aspose_font import FontLoader
from aspose_font.converter import FontConverter # internal API — may change between releases
from aspose_font import FontTypePasso 3: Carica e ispeziona un font WOFF
Carica un file WOFF con FontLoader.open() e leggi le proprietà di base come nome, famiglia e numero di glifi:
from aspose_font import FontLoader
woff_font = FontLoader.open("MyFont.woff")
print(f"Name: {woff_font.font_name}")
print(f"Family: {woff_font.font_family}")
print(f"Glyphs: {woff_font.num_glyphs}")
print(f"Type: {woff_font.font_type}")Passo 4: Leggi i metadati WOFF
I file WOFF possono contenere un blocco di metadati XML con licenza, crediti e descrizione. Accedilo tramite la proprietà metadata_xml.
from aspose_font import FontLoader
font = FontLoader.open("MyFont.woff")
# WOFF fonts may include an XML metadata block
xml = getattr(font, "metadata_xml", None)
if xml:
print(xml)
else:
print("No metadata in this WOFF file")Passo 5: Accedi alle tabelle TTF interne
Sia WoffFont sia Woff2Font espongono una proprietà inner_font che ti fornisce il TtfFont sottostante. Attraverso di essa puoi accedere a tutte le tabelle standard OpenType.
from aspose_font import FontLoader
font = FontLoader.open("MyFont.woff")
# WOFF wraps a TrueType font; access its tables via inner_font
inner = getattr(font, "inner_font")
tables = inner.ttf_tables
print(f"Units/em: {tables.head.units_per_em}")
print(f"Family name: {tables.name.best_name(1)}")Passo 6: Converti TTF in WOFF
Carica un font TTF e convertilo in formato WOFF passando FontType.WOFF a FontConverter.convert():
from aspose_font import FontLoader
from aspose_font.converter import FontConverter # internal API — may change between releases
from aspose_font import FontType
ttf_font = FontLoader.open("MyFont.ttf")
woff_font = FontConverter.convert(ttf_font, FontType.WOFF)
woff_bytes = woff_font.to_bytes()
from pathlib import Path
Path("MyFont.woff").write_bytes(woff_bytes)Passo 7: Converti TTF in WOFF2
Carica un font TTF e convertilo in formato WOFF2 passando FontType.WOFF2 a FontConverter.convert():
from aspose_font import FontLoader
from aspose_font.converter import FontConverter # internal API — may change between releases
from aspose_font import FontType
ttf_font = FontLoader.open("MyFont.ttf")
woff2_font = FontConverter.convert(ttf_font, FontType.WOFF2)
woff2_bytes = woff2_font.to_bytes()
from pathlib import Path
Path("MyFont.woff2").write_bytes(woff2_bytes)Passo 8: Converti tra WOFF e WOFF2
Converti un file WOFF caricato in WOFF2 (o viceversa) passando il target FontType a FontConverter.convert():
from aspose_font import FontLoader
from aspose_font.converter import FontConverter # internal API — may change between releases
from aspose_font import FontType
# WOFF -> WOFF2
woff_font = FontLoader.open("MyFont.woff")
woff2_font = FontConverter.convert(woff_font, FontType.WOFF2)
# WOFF2 -> WOFF
woff2_font = FontLoader.open("MyFont.woff2")
woff_font = FontConverter.convert(woff2_font, FontType.WOFF)Problemi comuni e soluzioni
FontParseException: Invalid WOFF signature — Il file non è un font WOFF valido. Verifica che il file non sia corrotto e inizi con i byte magic di WOFF.
FontParseException: WOFF table decompression failed — Una tabella compressa all’interno del file WOFF è corrotta. Prova a riscaricare il file del font.
Output WOFF2 di grandi dimensioni — WOFF2 utilizza la compressione Brotli, che produce file più piccoli rispetto a WOFF 1 (zlib). Se il tuo output WOFF2 è inaspettatamente grande, assicurati di partire da una sorgente TTF ottimizzata.
Domande frequenti
Qual è la differenza tra WOFF e WOFF2?
WOFF 1 utilizza la compressione zlib e WOFF 2 utilizza la compressione Brotli. WOFF2 tipicamente ottiene una compressione migliore del 20-30% rispetto a WOFF 1. Entrambi avvolgono gli stessi dati di font TrueType o CFF sottostanti.
Posso accedere alle tabelle dei font da un file WOFF?
Sì. Usa la proprietà inner_font per ottenere il TtfFont sottostante, quindi accedi alle tabelle tramite inner_font.ttf_tables.
La libreria supporta i metadati WOFF?
Sì. Entrambi WoffFont e Woff2Font espongono una proprietà metadata_xml contenente il blocco di metadati opzionale XML.