Come lavorare con i font WOFF in Python

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 FontType

Passo 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.

Vedi anche

 Italiano