How to Work with CFF Fonts in Python
CFF (Compact Font Format) is the outline format used inside OpenType fonts and standalone
.cff files. Aspose.Font FOSS represents CFF fonts as CffFont instances, which extend
the base Font class and expose CFF-specific data.
Step-by-Step Guide
Step 1: Install the Package
pip install "aspose-font>=1.0.0"Step 2: Import Required Classes
from aspose_font.loader import FontLoader
from aspose_font.cff.font import CffFont
from aspose_font import FontTypeStep 3: Load a CFF Font
Call FontLoader.open() with the path to your .cff file. The returned object is a CffFont instance exposing glyph count, font name, and CFF-specific properties:
font = FontLoader.open("MyFont.cff")
print(font.font_name)
print(font.num_glyphs)Step 4: Access Kern Pairs
Cast the loaded font to CffFont, then call get_kern_pairs() to retrieve the list of kern pair records. Not all CFF fonts contain kern data; check the length before iterating:
from aspose_font.loader import FontLoader
from aspose_font.cff.font import CffFont
cff_font: CffFont = FontLoader.open("MyFont.cff")
kern_pairs = cff_font.get_kern_pairs()
print(f"kern pairs: {len(kern_pairs)}")Step 5: Convert CFF to TTF
Pass the loaded CffFont to FontConverter.convert() with FontType.TTF to produce a new TtfFont in TTF outline format:
from aspose_font.loader import FontLoader
from aspose_font.converter import FontConverter
from aspose_font import FontType
font = FontLoader.open("MyFont.cff")
ttf = FontConverter.convert(font, FontType.TTF)Common Issues and Fixes
CffFont has no attribute cff_font — cff_font is a property on TtfFont that
returns embedded CFF data, not on the base Font class. For standalone CFF files use
CffFont directly.
Empty kern pairs — Not all CFF fonts contain kern pair data. Check with
len(cff_font.get_kern_pairs()) > 0 before iterating.
Frequently Asked Questions
What is the difference between CffFont and TtfFont?
CffFont represents standalone CFF files. TtfFont represents TTF/OTF files; an OTF
may embed a CFF outline accessible via ttf_font.cff_font.
Can I convert a CFF font to WOFF2?
Yes. FontConverter.convert(font, FontType.WOFF2) works with any Font instance
including CffFont.