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 21

Indeks 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ąp from_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; GlyphAccessor obejmuje większość przypadków użycia na wyższym poziomie

API Reference Podsumowanie

Klasa / MetodaOpis
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

Zobacz także

 Polski