Úvod
Compact Font Format (CFF) je binární formát popisu glyfů používaný v písmech OpenType s outline engine kompatibilním s PostScript. Aspose.Font FOSS pro Python poskytuje vyhrazenou sadu tříd v rámci jmenného prostoru aspose_font.cff pro čtení a kontrolu datových struktur CFF: CffFont, CffCharset, CffEncoding, CffDict, CffIndex a Type2Interpreter. Tento příspěvek provádí krok za krokem načítání CFF písem, procházení jejich vnitřních tabulek a interpretaci programů charstring pomocí knihovny.
Balíček má licenci MIT. Nainstalujte jej pomocí pip install aspose-font>=1.0.0.
Klíčové vlastnosti
Načítání písma CFF
FontLoader.open() automaticky detekuje formát CFF — předávejte buď samostatný soubor .cff, nebo soubor OTF, který obsahuje tabulku outline CFF. Vrácený objekt je CffFont (přístupný přes vlastnost cff_font na TtfFont pro soubory OTF).
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 Charset — mapování ID glyfů na názvy
CffCharset mapuje ID glifů (GID) na PostScript názvy glifů. Použijte standard() pro získání standardní znakové sady ISO Adobe nebo from_reader() pro analýzu znakové sady z binárních CFF dat. Metoda name_for() vrací PostScript název pro GID a gid_for() provádí opačný lookup.
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ódování — mapování Unicode na GID
CffEncoding zpracovává tabulku CFF kódování, která mapuje kódy znaků na ID glifů. standard() vrací standardní kódování, expert() vrací expertní kódování a from_reader() analyzuje vlastní kódování z binárních CFF dat. Použijte unicode_to_gid() pro vyhledání GID podle Unicode bodu kódu a get_all_codepoints() pro vyjmenování všech mapovaných bodů kódu.
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")
Parsování slovníku CFF
Fonty CFF ukládají metadata na nejvyšší úrovni i soukromá v slovnících. CffDict.from_bytes() analyzuje surový CFF DICT blob a poskytuje vám get() a set() přístup podle klíče operátoru. TopDict.from_dict() to specializuje pro slovníky CFF na nejvyšší úrovni a PrivateDict.from_dict() dělá totéž pro soukromé DICTy.
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 struktury indexu
CffIndex představuje datovou strukturu CFF INDEX — pole řetězců bajtů proměnné délky s předponou délky, používané pro charstringy, subrs a tabulky názvů. from_reader() analyzuje INDEX z binárního čteče a výsledek je indexovatelný pomocí celočíselného indexu.
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)}")
Interpretace Type 2 Charstring
Type2Interpreter spouští program Type 2 charstring (kompaktní formát podobný PostScript, používaný ve fontech CFF) a vytváří GlyphPath příkazů obrysu. Zavolejte interpret() s bajty charstringu a přidruženým soukromým slovníkem. To vám umožní extrahovat surové obrysy glyfů z CFF charstringů bez úplného interpretru PostScript.
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)
Rychlý start
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)}")
Podporované formáty
| Formát | Přípona | Číst | Zapsat |
|---|---|---|---|
| CFF | .cff | ✓ | ✓ |
| OTF | .otf | ✓ | ✓ |
| TTF | .ttf | ✓ | ✓ |
| WOFF | .woff | ✓ | ✓ |
| WOFF2 | .woff2 | ✓ | ✓ |
| EOT | .eot | ✓ | ✓ |
| TYPE1 | .pfb / .pfa | ✓ | ✓ |
Open Source a licencování
Aspose.Font FOSS pro Python je licencováno pod licencí MIT. Zdrojový kód je na GitHub na aspose-font-foss/Aspose.Font-FOSS-for-Python. Instalujte z PyPI jako aspose-font.