Jak pracować z tabelami czcionek w Python
Ten przewodnik pokazuje, jak odczytać nazwane tabele TTF, pobrać surowe bajty tabeli i zapisać zmodyfikowane dane tabeli przy użyciu TtfFont w Aspose.Font FOSS dla Python. Czcionki TrueType przechowują wszystkie dane w binarnych tabelach identyfikowanych przez 4-znakowe tagi. Aspose.Font FOSS udostępnia TtfTableSet do dostępu do nazwanych tabel oraz TtfFont.get_table_bytes(tag) / TtfFont.set_table_bytes(tag, data) do surowego dostępu binarnego.
Przewodnik krok po kroku
Krok 1: Zainstaluj pakiet
Zainstaluj pakiet Aspose.Font FOSS używając poniższego polecenia:
git clone https://github.com/aspose-font-foss/Aspose.Font-FOSS-for-Python.git
cd Aspose.Font-FOSS-for-Python
pip install -e .Krok 2: Zaimportuj wymagane klasy
Importuj FontLoader i TtfFont, aby załadować plik czcionki i uzyskać dostęp do jego zestawu tabel:
from aspose_font import FontLoader
from aspose_font import TtfFontKrok 3: Uzyskaj dostęp do nazwanych tabel
Załaduj plik TTF za pomocą FontLoader.open() i uzyskaj dostęp do nazwanych tabel poprzez właściwość ttf_tables:
ttf_font: TtfFont = FontLoader.open("Roboto-Regular.ttf")
tables = ttf_font.ttf_tables
print("kern present:", tables.kern is not None)
print("cmap present:", tables.cmap is not None)Krok 4: Odczytaj surowe bajty tabeli
Odczytaj surowe dane binarne konkretnej tabeli, przekazując jej czteroznakowy tag do get_table_bytes():
ttf_font: TtfFont = FontLoader.open("Roboto-Regular.ttf")
raw = ttf_font.get_table_bytes("name")
print(f"name table: {len(raw)} bytes")Krok 5: Zapisz zmodyfikowane bajty tabeli
Zapisz zmodyfikowane dane binarne z powrotem do nazwanej tabeli, używając set_table_bytes() wraz z tagiem i ładunkiem bajtów:
ttf_font: TtfFont = FontLoader.open("Roboto-Regular.ttf")
modified = b"..." # your modified binary data
ttf_font.set_table_bytes("GSUB", modified)Typowe problemy i rozwiązania
AttributeError: Font has no attribute ttf_tables — ttf_tables jest włączony TtfFont, nie bazowy Font klasa. Użyj ttf_font: TtfFont = FontLoader.open(...) aby uzyskać typowane odwołanie.
get_table_bytes zwraca puste bajty — Tag musi mieć dokładnie 4 znaki (w razie potrzeby wypełnij spacjami, np. "kern" not "KRN").
Najczęściej zadawane pytania
Jakie nazwane tabele są udostępniane w TtfTableSet?
head, hhea, maxp, os2, name, post, cmap, loca, hmtx oraz kern.
Czy mogę dodać nową tabelę do czcionki?
Tak. Przekaż dowolny prawidłowy 4-bajtowy tag oraz dane bajtowe do TtfFont.set_table_bytes(tag, data).