مدیریت اصلی فونت
مدیریت اصلی فونت
این راهنما نشان میدهد چگونه فونتها را از مسیرهای فایل یا آرایههای بایتی بارگذاری کنید، ویژگیهای متادیتا را بخوانید، نقاط کد یونیکد را به شناسههای گلیف نگاشت کنید، گلیفها را بازیابی کنید، و با محورهای متغیر فونت و نمونههای نامدار کار کنید.
FontLoader نقطهٔ ورودی اصلی برای تمام عملیات بارگذاری فونت است. پس از بارگذاری یک فونت، کلاس پایهٔ Font دسترسی به متادیتا، رمزگذاری، دسترسی به گلیف و معیارها را بدون نیاز به تجزیه جدول باینری فراهم میکند.
بارگذاری فونتها
FontLoader.open(source, font_type, collection_index) یک فونت را از مسیر فایل با شناسایی خودکار فرمت بارگذاری میکند. FontLoader.load(source, font_type, collection_index) بایتهای خام را برای جریانهای کاری در حافظه یا شبکه میپذیرد.
from aspose_font import FontLoader
# From a file path — format auto-detected
font = FontLoader.open("Roboto-Regular.ttf")
# From raw bytes — useful for in-memory or network workflows
with open("OpenSans-Regular.otf", "rb") as f:
font = FontLoader.load(f.read())خواندن متادیتا فونت
پس از بارگذاری، شیء Font ویژگیهای font_name، font_family، font_style و num_glyphs را برای بازرسی سریع بدون تجزیه جدول دستی در دسترس قرار میدهد.
from aspose_font import FontLoader
font = FontLoader.open("MyFont.ttf")
print(font.font_name) # full PostScript name
print(font.font_family) # family name
print(font.font_style) # style name e.g. "Regular", "Bold"
print(font.num_glyphs) # total glyph countرمزگذاری گلیف
FontEncoding نقاط کد یونیکد را به شناسههای گلیف نقشه میکند. از unicode_to_gid(cp) برای حل یک نقطه کد واحد استفاده کنید، یا از get_all_codepoints() برای فهرست کردن تمام نقاط کد نگاشتهشده در قلم.
from aspose_font import FontLoader
font = FontLoader.open("OpenSans-Regular.otf")
# Map a single code point
gid = font.encoding.unicode_to_gid(0x41) # GID for 'A'
# Enumerate all mapped code points
all_cps = font.encoding.get_all_codepoints()
print(f"Font covers {len(all_cps)} Unicode code points")دسترسی به گلیف
GlyphAccessor اشیای گلیف را بر اساس شناسه، یونیکد یا رشتهٔ متن بازیابی میکند.
from aspose_font import FontLoader
font = FontLoader.open("OpenSans-Regular.otf")
glyph = font.glyph_accessor.get_glyph_by_id(gid)
glyph_a = font.glyph_accessor.get_glyph_by_unicode(0x41)
glyphs = font.glyph_accessor.get_glyphs_for_text("Hello")
all_ids = font.glyph_accessor.get_all_glyph_ids()فونتهای متغیر
برای فونتهای متغیر (آنهایی که شامل جدول fvar هستند)، TtfFont تعاریف محور و نمونههای نامدار را بهصورت مستقیم نمایش میدهد.
from aspose_font import FontLoader
from aspose_font import TtfFont
loaded = FontLoader.load("Roboto-VariableFont_wdth,wght.ttf")
ttf: TtfFont = loaded.font
# Check if the font is variable
if ttf.is_variable:
# List all variation axes
for axis in ttf.variable_axes:
print(f"{axis.tag} range: {axis.min_value}..{axis.max_value} default: {axis.default_value}")
# Look up a single axis by tag
wght = ttf.get_axis("wght")
if wght:
print(f"Weight axis: {wght.min_value}..{wght.max_value}")
# Enumerate named instances (e.g. Bold, Condensed)
for inst in ttf.named_instances:
print(f"Instance: name_id={inst.name_id} coordinates={inst.coordinates}")برای جریانهای کاری نمونهسازی سطح بالاتر، SmartInstancer شمارش محورها و حل نمونههای نامدار را در یک شیء واحد میپیچاند:
from aspose_font import FontLoader
from aspose_font import SmartInstancer
loaded = FontLoader.load("Roboto-VariableFont_wdth,wght.ttf")
instancer = SmartInstancer(loaded.font)
print(f"Axes: {[a.tag for a in instancer.axes]}")
print(f"Named instances: {len(instancer.named_instances)}")نکات و بهترین روشها
- در زمان پردازش مکرر یک فایل قلم، اشیای بارگذاریشده
Fontرا در کش ذخیره کنید FontLoader.load(bytes)را برای جریانهای کاری شبکه یا پایگاه داده استفاده کنید تا از فایلهای موقت جلوگیری شود- قبل از زیرمجموعهسازی،
num_glyphsرا بررسی کنید تا پوشش پس از زیرمجموعهسازی را تخمین بزنید get_all_glyph_ids()برای تکرار مجموعه کامل گلیفها مفید است
مشکلات رایج
| مسأله | دلیل | رفع |
|---|---|---|
UnsupportedFontFormatException | قالب فایل شناسایی نشد | اطمینان حاصل کنید که فایل یک TTF/OTF/CFF/WOFF/WOFF2/EOT/Type1 معتبر است |
FontParseException | داده باینری خراب | فایل قلم را پیش از بارگذاری با یک لینتر اعتبارسنجی کنید |
GlyphNotFoundException | GID خارج از محدوده | قبل از دسترسی به وسیله شناسه، num_glyphs را بررسی کنید |
FAQ
آیا FontLoader از WOFF2 پشتیبانی میکند؟
بله. هر دو FontLoader.open() و FontLoader.load() فایلهای WOFF2 را میپذیرند و بهصورت خودکار قالب را شناسایی میکنند.
آیا میتوانم یک فونت را از یک URL بارگذاری کنم؟
بهطور مستقیم نیست. بایتهای فونت را با urllib یا requests دانلود کنید و به FontLoader.load(bytes) منتقل کنید.
آیا بارگذاری thread-safe است؟
هر فراخوانی FontLoader.open() یک شیء مستقل Font برمیگرداند. فراخوانیهای همزمان روی اشیاء جداگانه ایمن هستند.
API Reference خلاصه
| کلاس / متد | توضیح |
|---|---|
FontLoader.open(path) | قلمی را از مسیر فایل بارگذاری کنید |
FontLoader.load(data) | یک فونت را از بایتهای خام بارگذاری کنید |
Font.font_name | نام کامل فونت PostScript |
Font.font_family | نام خانواده فونت |
Font.font_style | نام سبک فونت |
Font.num_glyphs | تعداد کل گلیف |
FontEncoding.unicode_to_gid(cp) | نقشهبرداری نقطه کد یونیکد به شناسه گلیف |
FontEncoding.get_all_codepoints() | تمام نقاط کد یونیکد با نگاشتهای گلیف |
GlyphAccessor.get_glyph_by_id(gid) | دریافت گلیف بر اساس شناسه |
GlyphAccessor.get_glyph_by_unicode(cp) | دریافت گلیف بر اساس نقطه کد یونیکد |
GlyphAccessor.get_glyphs_for_text(text) | بازیابی گلیفها برای یک رشته متنی |
GlyphAccessor.get_all_glyph_ids() | فهرست تمام شناسههای گلیف در فونت |
TtfFont.is_variable | آیا فونت شامل دادههای فونت متغیر است |
TtfFont.variable_axes | فهرست اشیاء VariableAxis برای هر محور تغییر |
TtfFont.get_axis(tag) | یک محور را بر اساس برچسب چهار حرفی آن جستجو کنید |
TtfFont.named_instances | نمونههای نامگذاریشده تعریفشده در جدول fvar قلم |
SmartInstancer(font) | دستیار سطحبالا که پرسوجوهای محور و نمونه را میپیچاند |