Wie man mit Font-Tabellen in Python arbeitet
Dieser Leitfaden zeigt, wie man benannte TTF-Tabellen liest, rohe Binär-Tabellenbytes abruft und modifizierte Tabellendaten mit TtfFont in Aspose.Font FOSS für Python schreibt. TrueType-Schriften speichern alle Daten in binären Tabellen, die durch 4-Zeichen-Tags identifiziert werden. Aspose.Font FOSS stellt TtfTableSet für den Zugriff auf benannte Tabellen und TtfFont.get_table_bytes(tag) / TtfFont.set_table_bytes(tag, data) für den rohen Binärzugriff bereit.
Schritt-für-Schritt-Anleitung
Schritt 1: Paket installieren
Installieren Sie das Aspose.Font FOSS-Paket mit dem Befehl unten:
git clone https://github.com/aspose-font-foss/Aspose.Font-FOSS-for-Python.git
cd Aspose.Font-FOSS-for-Python
pip install -e .Schritt 2: Erforderliche Klassen importieren
Importieren Sie FontLoader und TtfFont, um eine Schriftdatei zu laden und auf ihr Tabellenset zuzugreifen:
from aspose_font import FontLoader
from aspose_font import TtfFontSchritt 3: Zugriff auf benannte Tabellen
Laden Sie eine TTF-Datei mit FontLoader.open() und greifen Sie über die ttf_tables-Eigenschaft auf benannte Tabellen zu:
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)Schritt 4: Roh-Tabellenbytes lesen
Lesen Sie die rohen Binärdaten einer bestimmten Tabelle, indem Sie ihr 4-Zeichen-Tag an get_table_bytes() übergeben:
ttf_font: TtfFont = FontLoader.open("Roboto-Regular.ttf")
raw = ttf_font.get_table_bytes("name")
print(f"name table: {len(raw)} bytes")Schritt 5: Modifizierte Tabellenbytes schreiben
Schreiben Sie modifizierte Binärdaten zurück in eine benannte Tabelle, indem Sie set_table_bytes() mit dem Tag und dem Byte-Payload verwenden:
ttf_font: TtfFont = FontLoader.open("Roboto-Regular.ttf")
modified = b"..." # your modified binary data
ttf_font.set_table_bytes("GSUB", modified)Häufige Probleme und Lösungen
AttributeError: Font has no attribute ttf_tables — ttf_tables ist eingeschaltet TtfFont, nicht die Basis Font Klasse. Verwenden ttf_font: TtfFont = FontLoader.open(...) um eine typisierte Referenz zu erhalten.
get_table_bytes gibt leere Bytes zurück — Das Tag muss genau 4 Zeichen lang sein (bei Bedarf mit Leerzeichen auffüllen, z.B. "kern" not "KRN").
Häufig gestellte Fragen
Welche benannten Tabellen werden auf TtfTableSet bereitgestellt?
head, hhea, maxp, os2, name, post, cmap, loca, hmtx und kern.
Kann ich einer Schriftart eine neue Tabelle hinzufügen?
Ja. Übergeben Sie ein beliebiges gültiges 4-Byte-Tag und Byte-Daten an TtfFont.set_table_bytes(tag, data).