Lavorare con i font CFF
Lavorare con i font CFF
Questa guida mostra come caricare e ispezionare gli interni dei font CFF — charset, tabelle di codifica, dizionari e strutture di indice — usando Aspose.Font FOSS per Python.
I font Compact Font Format (CFF) memorizzano i contorni dei glifi come programmi Type 2 charstring. Aspose.Font FOSS per Python fornisce classi dedicate nello spazio dei nomi aspose_font.cff per leggere i charset CFF, le tabelle di codifica, i dizionari e gli indici.
Charset CFF
CffCharset mappa gli ID dei glifi ai nomi dei glifi PostScript. Chiama CffCharset.standard() per ottenere il charset ISO Adobe integrato, quindi usa name_for() e gid_for() per tradurre tra ID dei glifi e nomi.
from aspose_font.cff import CffCharset
charset = CffCharset.standard()
name = charset.name_for(1) # PostScript name for GID 1
gid = charset.gid_for("A") # GID for PostScript name "A"Codifica CFF
CffEncoding mappa i codici dei caratteri agli ID dei glifi. La codifica standard copre il set di caratteri Adobe Latin; usa unicode_to_gid() per cercare singoli punti di codice e get_all_codepoints() per elencare tutti i valori mappati.
from aspose_font.cff import CffEncoding
enc = CffEncoding.standard()
gid = enc.unicode_to_gid(0x41)
codepoints = enc.get_all_codepoints()Analisi del Dizionario CFF
CffDict.from_bytes() analizza un blob CFF DICT grezzo in una mappatura indicizzata per operatore. Ogni chiave operatore è associata a un elenco di valori numerici che configurano il font, come la larghezza predefinita o gli offset delle sotto-routine.
from aspose_font.cff import CffDict
d = CffDict.from_bytes(raw_bytes)
vals = d.get(21) # retrieve values for operator 21Indice CFF
CffIndex.from_reader() analizza una struttura dati CFF INDEX da un flusso binario. Le strutture INDEX sono array di dati a lunghezza variabile usati per tabelle dei nomi, tabelle di stringhe e memorizzazione di charstring all’interno dei font CFF.
from aspose_font.cff import CffIndex
from aspose_font._io import BinaryReader # internal API — may change between releases
import io
reader = BinaryReader(io.BytesIO(raw_index_bytes))
index = CffIndex.from_reader(reader)
print(f"INDEX entries: {len(index)}")Interpretazione della Charstring Type 2
Type2Interpreter.interpret() esegue una charstring Type 2 e restituisce un GlyphPath.
from aspose_font.cff import Type2Interpreter
interpreter = Type2Interpreter()
glyph_path = interpreter.interpret(charstring_bytes, private_dict)Suggerimenti e Buone Pratiche
- Usa
CffEncoding.standard()come base; sovrascrivi confrom_reader()per codifiche incorporate CffDict.to_bytes()ti consente di riserializzare dizionari modificati- L’interpretazione delle charstring è necessaria solo per l’estrazione grezza dei contorni dei glifi;
GlyphAccessorcopre la maggior parte dei casi d’uso a un livello più alto
API Reference Riepilogo
| Classe / Metodo | Descrizione |
|---|---|
CffCharset.standard() | Charset ISO Adobe standard |
CffCharset.name_for(gid) | PostScript nome per un glyph ID |
CffCharset.gid_for(name) | Glyph ID per un nome PostScript |
CffEncoding.standard() | Tabella di codifica CFF standard |
CffEncoding.unicode_to_gid(cp) | Mappa il punto di codice a GID |
CffDict.from_bytes(data) | Analizza un DICT CFF grezzo |
CffDict.get(operator) | Ottieni valori per un operatore DICT |
CffIndex.from_reader(reader) | Analizza un INDEX CFF |
Type2Interpreter.interpret(cs, pd) | Esegui una charstring di tipo 2 |