Einleitung
Compact Font Format (CFF) ist das binäre Glyphenbeschreibungsformat, das in OpenType-Schriften mit einer PostScript-kompatiblen Kontur-Engine verwendet wird. Aspose.Font FOSS für Python stellt einen dedizierten Satz von Klassen im aspose_font.cff-Namensraum zum Lesen und Inspizieren von CFF-Datenstrukturen bereit: CffFont, CffCharset, CffEncoding, CffDict, CffIndex und Type2Interpreter. Dieser Beitrag führt durch das Laden von CFF-Schriften, das Navigieren ihrer internen Tabellen und das Interpretieren von Charstring-Programmen mit der Bibliothek.
Das Paket ist unter der MIT-Lizenz veröffentlicht. Installieren Sie es mit pip install aspose-font>=1.0.0.
Hauptmerkmale
Laden einer CFF-Schrift
FontLoader.open() erkennt das CFF-Format automatisch — übergeben Sie entweder eine eigenständige .cff-Datei oder eine OTF-Datei, die eine CFF-Konturtabelle eingebettet hat. Das zurückgegebene Objekt ist ein CffFont (zugänglich über die cff_font-Eigenschaft von TtfFont für OTF-Dateien).
from aspose_font.loader import FontLoader
# Load a standalone CFF file
font = FontLoader.open("OpenSans.cff")
# Load a standalone CFF file (auto-detected from format)
font = FontLoader.open("OpenSans.cff")
print(font.font_name, font.num_glyphs)
CFF-Zeichensatz — Zuordnung von Glyphen-IDs zu Namen
CffCharset ordnet Glyph-IDs (GIDs) PostScript Glyph-Namen zu. Verwenden Sie standard(), um den Standard-ISO-Adobe-Zeichensatz zu erhalten, oder from_reader(), um einen Zeichensatz aus binären CFF-Daten zu parsen. Die name_for()-Methode gibt den PostScript-Namen für eine GID zurück, und gid_for() führt die umgekehrte Suche durch.
from aspose_font.cff.charset import CffCharset
charset = CffCharset.standard()
print(charset.name_for(1)) # ".notdef" or similar
print(charset.gid_for("A")) # GID for the PostScript name "A"
CFF-Codierung — Unicode-zu-GID-Abbildung
CffEncoding verarbeitet die CFF-Codierungstabelle, die Zeichencodes zu Glyphen-IDs zuordnet. standard() liefert die Standardcodierung, expert() liefert die Expertencodierung, und from_reader() analysiert eine benutzerdefinierte Codierung aus CFF-Binärdaten. Verwenden Sie unicode_to_gid(), um eine GID über einen Unicode-Codepunkt nachzuschlagen, und get_all_codepoints(), um alle zugeordneten Codepunkte aufzulisten.
from aspose_font.cff.encoding import CffEncoding
encoding = CffEncoding.standard()
gid = encoding.unicode_to_gid(0x41) # Unicode for 'A'
all_codepoints = encoding.get_all_codepoints()
print(f"Standard encoding covers {len(all_codepoints)} code points")
CFF-Dictionary-Parsing
CFF-Schriften speichern Top-Level- und private Metadaten in Wörterbüchern. CffDict.from_bytes() analysiert einen rohen CFF DICT Blob und gibt Ihnen get() und set() Zugriff über den Operator-Schlüssel. TopDict.from_dict() spezialisiert dies für Top-Level CFF-Wörterbücher, und PrivateDict.from_dict() macht dasselbe für private DICTs.
from aspose_font.cff.dict_ import CffDict
# Parse a raw CFF DICT from bytes
raw_dict_bytes = b"..." # CFF-encoded DICT bytes
d = CffDict.from_bytes(raw_dict_bytes)
vals = d.get(21) # retrieve values for operator 21 (PostScript CharstringType)
CFF-Indexstrukturen
CffIndex stellt eine CFFINDEX-Datenstruktur dar — ein Längen-präfixiertes Array variabler Längen-Byte-Strings, das für Charstrings, Subrs und Namens-Tabellen verwendet wird. from_reader() parst einen INDEX aus einem Binärleser und das Ergebnis ist mittels ganzzahligem Index indizierbar.
from aspose_font.cff.index import CffIndex
from aspose_font._io import BinaryReader # internal API — may change between releases
import io
raw_index = b"..." # raw CFF INDEX bytes
reader = BinaryReader(io.BytesIO(raw_index))
index = CffIndex.from_reader(reader)
print(f"INDEX entries: {len(index)}")
Typ2Charstring-Interpretation
Type2Interpreter führt ein Type-2-Charstring-Programm aus (das kompakte PostScript-ähnliche Format, das in CFF-Schriften verwendet wird) und erzeugt ein GlyphPath von Konturbefehlen. Rufen Sie interpret() mit den Charstring-Bytes und dem zugehörigen privaten Wörterbuch auf. Dies ermöglicht es Ihnen, rohe Glyphen-Konturen aus CFF-Charstrings zu extrahieren, ohne einen vollständigen PostScript-Interpreter.
from aspose_font.cff.type2 import Type2Interpreter
interpreter = Type2Interpreter()
glyph_path = interpreter.interpret(charstring_bytes, private_dict)
for cmd in glyph_path.commands:
print(type(cmd).__name__, cmd)
Schnellstart
git clone https://github.com/aspose-font-foss/Aspose.Font-FOSS-for-Python.git
cd Aspose.Font-FOSS-for-Python
pip install -e .from aspose_font.loader import FontLoader
# Load an OTF with embedded CFF outlines
font = FontLoader.open("OpenSans-Regular.otf")
glyph_id = font.encoding.unicode_to_gid(0x41)
glyph = font.glyph_accessor.get_glyph_by_id(glyph_id)
print(f"Path commands for 'A': {len(glyph.path.commands)}")
Unterstützte Formate
| Format | Erweiterung | Lesen | Schreiben |
|---|---|---|---|
| CFF | .cff | ✓ | ✓ |
| OTF | .otf | ✓ | ✓ |
| TTF | .ttf | ✓ | ✓ |
| WOFF | .woff | ✓ | ✓ |
| WOFF2 | .woff2 | ✓ | ✓ |
| EOT | .eot | ✓ | ✓ |
| TYPE1 | .pfb / .pfa | ✓ | ✓ |
Open Source & Lizenzierung
Aspose.Font FOSS für Python ist unter der MIT-Lizenz verfügbar. Der Quellcode befindet sich auf GitHub bei aspose-font-foss/Aspose.Font-FOSS-for-Python. Installieren Sie von PyPI als aspose-font.