Pendahuluan
Compact Font Format (CFF) adalah format deskripsi glif biner yang digunakan di dalam font OpenType dengan mesin outline yang kompatibel PostScript. Aspose.Font FOSS untuk Python menyediakan seperangkat kelas khusus di bawah namespace aspose_font.cff untuk membaca dan memeriksa struktur data CFF: CffFont, CffCharset, CffEncoding, CffDict, CffIndex, dan Type2Interpreter. Posting ini menjelaskan cara memuat font CFF, menavigasi tabel internalnya, dan menginterpretasikan program charstring menggunakan perpustakaan tersebut.
Paket ini berlisensi MIT. Instal dengan pip install aspose-font>=1.0.0.
Fitur Utama
Memuat Font CFF
FontLoader.open() mendeteksi format CFF secara otomatis — berikan file .cff yang berdiri sendiri atau file OTF yang menyertakan tabel outline CFF. Objek yang dikembalikan adalah CffFont (dapat diakses melalui properti cff_font pada TtfFont untuk file 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)
Charset CFF — Memetakan ID Glif ke Nama
CffCharset memetakan ID glyph (GIDs) ke nama glyph PostScript. Gunakan standard() untuk mendapatkan charset ISO Adobe standar atau from_reader() untuk mengurai charset dari data biner CFF. Metode name_for() mengembalikan nama PostScript untuk sebuah GID, dan gid_for() melakukan pencarian terbalik.
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"
Enkoding CFF — Pemetaan Unicode-ke-GID
CffEncoding menangani tabel enkoding CFF, yang memetakan kode karakter ke ID glyph. standard() mengembalikan enkoding standar, expert() mengembalikan enkoding ahli, dan from_reader() mengurai enkoding khusus dari data biner CFF. Gunakan unicode_to_gid() untuk mencari GID berdasarkan titik kode Unicode dan get_all_codepoints() untuk mencantumkan semua titik kode yang dipetakan.
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")
Penguraian Kamus CFF
Font CFF menyimpan metadata tingkat atas dan privat dalam kamus. CffDict.from_bytes() mengurai blob CFF DICT mentah dan memberi Anda akses get() dan set() berdasarkan kunci operator. TopDict.from_dict() mengkhususkan ini untuk kamus CFF tingkat atas, dan PrivateDict.from_dict() melakukan hal yang sama untuk DICT privat.
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)
Struktur Indeks CFF
CffIndex merepresentasikan struktur data CFF INDEX — sebuah array berawalan panjang yang berisi string byte berukuran variabel yang digunakan untuk charstrings, subrs, dan tabel nama. from_reader() mengurai sebuah INDEX dari pembaca biner dan hasilnya dapat diindeks dengan indeks integer.
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)}")
Interpretasi Charstring Tipe 2
Type2Interpreter mengeksekusi program Type 2 charstring (format kompak mirip PostScript yang digunakan dalam font CFF) dan menghasilkan GlyphPath perintah outline. Panggil interpret() dengan byte charstring dan kamus pribadi yang terkait. Ini memungkinkan Anda mengekstrak outline glyph mentah dari charstring CFF tanpa interpreter PostScript penuh.
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)
Panduan Cepat
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)}")
Format yang Didukung
| Format | Ekstensi | Baca | Tulis |
|---|---|---|---|
| CFF | .cff | ✓ | ✓ |
| OTF | .otf | ✓ | ✓ |
| TTF | .ttf | ✓ | ✓ |
| WOFF | .woff | ✓ | ✓ |
| WOFF2 | .woff2 | ✓ | ✓ |
| EOT | .eot | ✓ | ✓ |
| TYPE1 | .pfb / .pfa | ✓ | ✓ |
Sumber Terbuka & Lisensi
Aspose.Font FOSS untuk Python berlisensi MIT. Kode sumber ada di GitHub pada aspose-font-foss/Aspose.Font-FOSS-for-Python. Instal dari PyPI sebagai aspose-font.