परिचय
कॉम्पैक्ट फ़ॉन्ट फ़ॉर्मेट (CFF) वह बाइनरी ग्लिफ़ विवरण फ़ॉर्मेट है जो OpenType फ़ॉन्ट्स के भीतर PostScript-अनुकूल आउटलाइन इंजन के साथ उपयोग किया जाता है। Aspose.Font FOSS for Python aspose_font.cff नेमस्पेस के तहत CFF डेटा संरचनाओं को पढ़ने और निरीक्षण करने के लिए एक समर्पित क्लास सेट प्रदान करता है: CffFont, CffCharset, CffEncoding, CffDict, CffIndex, और Type2Interpreter. यह पोस्ट दिखाता है कि कैसे CFF फ़ॉन्ट्स को लोड किया जाए, उनके आंतरिक टेबल्स को नेविगेट किया जाए, और लाइब्रेरी का उपयोग करके चारस्ट्रिंग प्रोग्राम्स की व्याख्या की जाए।
पैकेज MIT लाइसेंस के तहत है। इसे pip install aspose-font>=1.0.0 के साथ इंस्टॉल करें।
मुख्य विशेषताएँ
CFF फ़ॉन्ट लोड करना
FontLoader.open() स्वचालित रूप से CFF फ़ॉर्मेट का पता लगाता है — या तो एक स्टैंडअलोन .cff फ़ाइल या एक OTF फ़ाइल पास करें जिसमें CFF आउटलाइन टेबल एम्बेडेड हो। लौटाया गया ऑब्जेक्ट एक CffFont है (OTF फ़ाइलों के लिए TtfFont पर cff_font प्रॉपर्टी के माध्यम से उपलब्ध)।
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 कैरसेट — ग्लिफ़ IDs को नामों से मैप करना
CffCharset glyph IDs (GIDs) को PostScript glyph नामों से मैप करता है। मानक ISO Adobe charset प्राप्त करने के लिए standard() का उपयोग करें या बाइनरी CFF डेटा से charset पार्स करने के लिए from_reader() का उपयोग करें। name_for() मेथड एक GID के लिए PostScript नाम लौटाता है, और gid_for() विपरीत लुकअप करता है।
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 एन्कोडिंग — Unicode-to-GID मैपिंग
CffEncoding CFF एन्कोडिंग टेबल को संभालता है, जो character कोड्स को glyph IDs से मैप करता है। standard() मानक एन्कोडिंग लौटाता है, expert() expert एन्कोडिंग लौटाता है, और from_reader() CFF बाइनरी डेटा से एक कस्टम एन्कोडिंग पार्स करता है। Unicode कोड पॉइंट द्वारा GID खोजने के लिए unicode_to_gid() का उपयोग करें और सभी मैप किए गए कोड पॉइंट्स की सूची बनाने के लिए get_all_codepoints() का उपयोग करें।
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 डिक्शनरी पार्सिंग
CFF फ़ॉन्ट शीर्ष-स्तर और निजी मेटाडेटा को डिक्शनरी में संग्रहीत करते हैं। CffDict.from_bytes() एक कच्चा CFF DICT ब्लॉब पार्स करता है और आपको ऑपरेटर कुंजी द्वारा get() और set() एक्सेस देता है। TopDict.from_dict() इसे शीर्ष-स्तर CFF डिक्शनरी के लिए विशेष बनाता है, और PrivateDict.from_dict() निजी 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 इंडेक्स संरचनाएँ
CffIndex एक CFF INDEX डेटा संरचना को दर्शाता है — एक लंबाई-प्रिफिक्स्ड एरे जिसमें चर-लंबाई के बाइट स्ट्रिंग्स होते हैं, जो charstrings, subrs, और name टेबल्स के लिए उपयोग होते हैं। from_reader() एक बाइनरी रीडर से INDEX को पार्स करता है और परिणाम को 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)}")
टाइप 2 Charstring व्याख्या
Type2Interpreter Type 2 charstring प्रोग्राम (CFF फ़ॉन्ट्स में उपयोग किए जाने वाले कॉम्पैक्ट PostScript-जैसे फ़ॉर्मेट) को निष्पादित करता है और outline कमांड्स का एक GlyphPath उत्पन्न करता है। interpret() को charstring बाइट्स और संबंधित प्राइवेट डिक्शनरी के साथ कॉल करें। इससे आप CFF charstrings से पूर्ण PostScript इंटरप्रेटर के बिना कच्चे glyph outlines निकाल सकते हैं।
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)
त्वरित प्रारंभ
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)}")
समर्थित फ़ॉर्मेट्स
| फ़ॉर्मेट | एक्सटेंशन | पढ़ें | लिखें |
|---|---|---|---|
| CFF | .cff | ✓ | ✓ |
| OTF | .otf | ✓ | ✓ |
| TTF | .ttf | ✓ | ✓ |
| WOFF | .woff | ✓ | ✓ |
| WOFF2 | .woff2 | ✓ | ✓ |
| EOT | .eot | ✓ | ✓ |
| TYPE1 | .pfb / .pfa | ✓ | ✓ |
ओपन सोर्स और लाइसेंसिंग
Aspose.Font FOSS Python के लिए MIT लाइसेंस के तहत है। स्रोत कोड GitHub पर aspose-font-foss/Aspose.Font-FOSS-for-Python पर स्थित है। PyPI से aspose-font के रूप में स्थापित करें।