Inleiding

Compact Font Format (CFF) is het binaire glyph-beschrijvingsformaat dat wordt gebruikt in OpenType lettertypen met een PostScript-compatibele outline-engine. Aspose.Font FOSS voor Python biedt een speciale set klassen onder de aspose_font.cff namespace voor het lezen en inspecteren van CFF-gegevensstructuren: CffFont, CffCharset, CffEncoding, CffDict, CffIndex en Type2Interpreter. Deze post loopt door hoe CFF-lettertypen te laden, hun interne tabellen te navigeren, en charstring-programma’s te interpreteren met behulp van de bibliotheek.

Het pakket heeft een MIT-licentie. Installeer het met pip install aspose-font>=1.0.0.


Belangrijkste kenmerken

Laden van een CFF-lettertype

FontLoader.open() detecteert CFF-formaat automatisch — geef ofwel een losstaand .cff-bestand of een OTF-bestand dat een CFF-outline-tabel bevat. Het geretourneerde object is een CffFont (toegankelijk via de cff_font-eigenschap op TtfFont voor OTF-bestanden).

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 — Glyph-ID’s naar namen in kaart brengen

CffCharset koppelt glyph-ID’s (GIDs) aan PostScript glyph-namen. Gebruik standard() om de standaard ISO Adobe-tekenset te verkrijgen of from_reader() om een tekenset te parseren uit binaire CFF-gegevens. De name_for() methode retourneert de PostScript naam voor een GID, en gid_for() voert de omgekeerde zoekopdracht uit.

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-codering — Unicode-naar-GID-mapping

CffEncoding behandelt de CFF-coderingstabel, die tekencodes naar glyph-ID’s mappt. standard() retourneert de standaardcodering, expert() retourneert de expertcodering, en from_reader() parseert een aangepaste codering uit binaire CFF-gegevens. Gebruik unicode_to_gid() om een GID op te zoeken op basis van een Unicode-codepunt en get_all_codepoints() om alle toegewezen codepunten te enumereren.

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-woordenboekparsing

CFF-lettertypen slaan top-level en private metadata op in woordenboeken. CffDict.from_bytes() parseert een ruwe CFF DICT-blob en geeft je get() en set() toegang via de operator-sleutel. TopDict.from_dict() specialiseert dit voor top-level CFF-woordenboeken, en PrivateDict.from_dict() doet hetzelfde voor 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-indexstructuren

CffIndex representeert een CFF INDEX-datastructuur — een lengte-geprefixed array van variabele-lengte byte-strings die worden gebruikt voor charstrings, subrs en naamtabellen. from_reader() parseert een INDEX vanuit een binaire lezer en het resultaat is indexeerbaar met een geheel getal.

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)}")

Interpretatie van Type-2-charstring

Type2Interpreter voert een Type 2 charstring-programma uit (het compacte PostScript-achtige formaat dat wordt gebruikt in CFF-lettertypen) en produceert een GlyphPath van omtrekcommando’s. Roep interpret() aan met de charstring-bytes en het bijbehorende private dictionary. Dit stelt je in staat om ruwe glyph-omtrekken te extraheren uit CFF-charstrings zonder een volledige 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)

Snelstart

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)}")

Ondersteunde formaten

FormaatExtensieLezenSchrijven
CFF.cff
OTF.otf
TTF.ttf
WOFF.woff
WOFF2.woff2
EOT.eot
TYPE1.pfb / .pfa

Open source & licenties

Aspose.Font FOSS voor Python is MIT-licentie. Broncode staat op GitHub op aspose-font-foss/Aspose.Font-FOSS-for-Python. Installeer vanaf PyPI als aspose-font.


Aan de slag

Gerelateerde bronnen