مدیریت اصلی فونت

مدیریت اصلی فونت

مدیریت اصلی فونت

این راهنما نشان می‌دهد چگونه فونت‌ها را از مسیرهای فایل یا آرایه‌های بایتی بارگذاری کنید، ویژگی‌های متادیتا را بخوانید، نقاط کد یونیکد را به شناسه‌های گلیف نگاشت کنید، گلیف‌ها را بازیابی کنید، و با محورهای متغیر فونت و نمونه‌های نام‌دار کار کنید.

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داده باینری خرابفایل قلم را پیش از بارگذاری با یک لینتر اعتبارسنجی کنید
GlyphNotFoundExceptionGID خارج از محدودهقبل از دسترسی به وسیله شناسه، 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)دستیار سطح‌بالا که پرس‌وجوهای محور و نمونه را می‌پیچاند

همچنین ببینید:

 فارسی