Praca z czcionkami CFF
Praca z czcionkami CFF
Ten przewodnik pokazuje, jak ładować i przeglądać wewnętrzne struktury czcionek CFF — zestawy znaków, tabele kodowania, słowniki i struktury indeksów — przy użyciu Aspose.Font FOSS dla Python.
Czcionki w formacie Compact Font Format (CFF) przechowują kontury glifów jako programy Type 2 charstring. Aspose.Font FOSS dla Python udostępnia dedykowane klasy w przestrzeni nazw aspose_font.cff do odczytu zestawów znaków CFF, tabel kodowania, słowników i indeksów.
Zestaw znaków CFF
CffCharset mapuje identyfikatory glifów na nazwy glifów PostScript. Wywołaj CffCharset.standard(), aby uzyskać wbudowany zestaw znaków ISO Adobe, a następnie użyj name_for() i gid_for(), aby przetłumaczyć między identyfikatorami glifów a nazwami.
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"Kodowanie CFF
CffEncoding mapuje kody znaków na identyfikatory glifów. Standardowe kodowanie obejmuje zestaw znaków Adobe Latin; użyj unicode_to_gid(), aby wyszukać poszczególne punkty kodowe, oraz get_all_codepoints(), aby wyświetlić wszystkie zmapowane wartości.
from aspose_font.cff import CffEncoding
enc = CffEncoding.standard()
gid = enc.unicode_to_gid(0x41)
codepoints = enc.get_all_codepoints()Parsowanie słownika CFF
CffDict.from_bytes() parsuje surowy blob CFF DICT do mapowania kluczowanego przez operatora. Każdy klucz operatora mapuje na listę wartości liczbowych konfiguracyjnych czcionki, takich jak domyślna szerokość lub offsety podprogramów.
from aspose_font.cff import CffDict
d = CffDict.from_bytes(raw_bytes)
vals = d.get(21) # retrieve values for operator 21Indeks CFF
CffIndex.from_reader() parsuje strukturę danych CFF INDEX z binarnego strumienia. Struktury INDEX są tablicami danych o zmiennej długości używanymi do tabel nazw, tabel łańcuchów znaków i przechowywania charstringów w czcionkach 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)}")Interpretacja Charstringu Type 2
Type2Interpreter.interpret() wykonuje charstring Type 2 i zwraca GlyphPath.
from aspose_font.cff import Type2Interpreter
interpreter = Type2Interpreter()
glyph_path = interpreter.interpret(charstring_bytes, private_dict)Wskazówki i najlepsze praktyki
- Użyj
CffEncoding.standard()jako podstawy; zastąpfrom_reader()dla wbudowanych kodowań CffDict.to_bytes()pozwala na ponowne serializowanie zmodyfikowanych słowników- Interpretacja charstring jest potrzebna tylko do wyodrębniania surowych konturów glifów;
GlyphAccessorobejmuje większość przypadków użycia na wyższym poziomie
API Reference Podsumowanie
| Klasa / Metoda | Opis |
|---|---|
CffCharset.standard() | Standardowy zestaw znaków ISO Adobe |
CffCharset.name_for(gid) | PostScript nazwa dla glyph ID |
CffCharset.gid_for(name) | Glyph ID dla nazwy PostScript |
CffEncoding.standard() | Standardowa tabela kodowania CFF |
CffEncoding.unicode_to_gid(cp) | Mapuj punkt kodowy na GID |
CffDict.from_bytes(data) | Parsuj surowy DICT CFF |
CffDict.get(operator) | Pobierz wartości dla operatora DICT |
CffIndex.from_reader(reader) | Parsuj INDEX CFF |
Type2Interpreter.interpret(cs, pd) | Wykonaj charstring typu 2 |