Bevezetés
A Compact Font Format (CFF) a bináris glifleíró formátum, amelyet a OpenType betűtípusokban használnak egy PostScript-kompatibilis körvonalmotorral. A Aspose.Font FOSS a Python számára egy dedikált osztálykészletet tesz elérhetővé a aspose_font.cff névtér alatt a CFF adatstruktúrák olvasásához és vizsgálatához: CffFont, CffCharset, CffEncoding, CffDict, CffIndex és Type2Interpreter. Ez a bejegyzés bemutatja, hogyan töltsünk be CFF betűtípusokat, hogyan navigáljunk a belső tábláikban, és hogyan értelmezzük a karakterlánc programokat a könyvtár használatával.
A csomag MIT licenc alatt áll. Telepítsd a pip install aspose-font>=1.0.0 segítségével.
Főbb jellemzők
CFF betűtípus betöltése
FontLoader.open() automatikusan észleli a CFF formátumot — adj meg egy önálló .cff fájlt vagy egy OTF fájlt, amely CFF körvonal táblát tartalmaz. A visszaadott objektum egy CffFont (elérhető a TtfFont objektum cff_font tulajdonságán keresztül OTF fájlok esetén).
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 karakterkészlet — Glifazonosítók leképezése nevekre
CffCharset leképezi a glyfazonosítókat (GID-eket) a PostScript glyfnevekre. Használja a standard()-t a szabványos ISO Adobe karakterkészlet lekéréséhez, vagy a from_reader()-t egy karakterkészlet bináris CFF adatokból történő feldolgozásához. A name_for() metódus visszaadja a PostScript nevet egy GID-hez, a gid_for() pedig a fordított keresést végzi.
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 kódolás — Unicode-tól-GID-ig leképezés
CffEncoding kezeli a CFF kódolási táblát, amely a karakterkódokat glyfazonosítókra (GID-ekre) képezi le. standard() visszaadja a szabványos kódolást, expert() a szakértői kódolást, és from_reader() egy egyedi kódolást dolgoz fel a CFF bináris adatokból. Használja a unicode_to_gid()-t egy GID kereséséhez Unicode kódpont alapján, és a get_all_codepoints()-t az összes leképezett kódpont felsorolásához.
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 szótár feldolgozása
A CFF betűtípusok a felső szintű és a privát metaadatokat szótárakban tárolják. CffDict.from_bytes() feldolgozza a nyers CFF DICT blob-ot, és get() és set() hozzáférést biztosít operátor kulcs alapján. TopDict.from_dict() ezt a felső szintű CFF szótárakra specializálja, a PrivateDict.from_dict() pedig ugyanazt teszi a privát DICT-okra.
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 index struktúrák
CffIndex egy CFF INDEX adatstruktúrát reprezentál — egy hossz előtaggal rendelkező tömböt változó hosszúságú bájtsorozatokból, amelyeket karakterláncokhoz, subrs-hez és névtáblákhoz használnak. from_reader() egy INDEX-et dolgoz fel egy bináris olvasóból, és az eredmény egész szám indexelhető.
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)}")
Type 2 karakterlánc értelmezése
Type2Interpreter végrehajt egy Type 2 charstring programot (a CFF betűtípusokban használt kompakt PostScript-szerű formátumot) és egy GlyphPath készít a körvonal-parancsokból. Hívja meg a interpret() függvényt a charstring bájtokkal és a hozzá tartozó privát szótárral. Ez lehetővé teszi, hogy nyers glyf körvonalakat nyerjünk ki a CFF charstringekből egy teljes PostScript interpreter nélkül.
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)
Gyors kezdés
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)}")
Támogatott formátumok
| Formátum | Kiterjesztés | Olvasás | Írás |
|---|---|---|---|
| CFF | .cff | ✓ | ✓ |
| OTF | .otf | ✓ | ✓ |
| TTF | .ttf | ✓ | ✓ |
| WOFF | .woff | ✓ | ✓ |
| WOFF2 | .woff2 | ✓ | ✓ |
| EOT | .eot | ✓ | ✓ |
| TYPE1 | .pfb / .pfa | ✓ | ✓ |
Nyílt forráskód és licencelés
Aspose.Font FOSS a(z) Python számára MIT licenc alatt áll. A forráskód elérhető a GitHub oldalon a aspose-font-foss/Aspose.Font-FOSS-for-Python címen. Telepítés a PyPI -ból aspose-font néven.