مقدمه

فونت‌های TrueType (.ttf) و زیرمجموعهٔ OpenType آن‌ها (.otf) فرمت‌های غالب فونت در سیستم‌عامل‌های مدرن هستند. هر دو فرمت ساختار جدول باینری یکسانی دارند که در مشخصات OpenType ریشه دارد. Aspose.Font FOSS برای Python این ساختار را از طریق TtfFont نمایش می‌دهد و دسترسی مستقیم به جداول OpenType جداگانه، داده‌های جفت کرن، محورهای فونت متغیر و خطوط گلیف را فراهم می‌کند.

کلاس TtfFont کلاس پایهٔ Font را با متدهای خاص TTF شامل get_blob، get_table_bytes، set_table_bytes و instantiate برای قفل‌گذاری محور فونت متغیر گسترش می‌دهد. ویژگی TtfTableSet (ttf_tables) دسترسی تایپی به رایج‌ترین جداول OpenType را فراهم می‌کند: head، hhea، maxp، os2، name، post.

این کتابخانه بر روی PyPI به عنوان aspose-font منتشر شده و تحت مجوز MIT License عرضه می‌شود. هیچ وابستگی تجاری اجباری ندارد.


ویژگی‌های کلیدی

بارگذاری فونت‌های TTF و OTF

از FontLoader.open برای بارگذاری هر فایل فونت TrueType یا OpenType استفاده کنید:

from aspose_font import FontLoader

loaded = FontLoader.open("fonts/Roboto-Regular.ttf")

print(loaded.font_name)
print(loaded.font_family)
print(loaded.font_style)
print(loaded.num_glyphs)

FontLoader.open قالب قلم را از سرآیند فایل تشخیص می‌دهد. هر دو فایل‌های .ttf (TrueType) و .otf (OpenType CFF) پشتیبانی می‌شوند و هر دو یک نمونهٔ TtfFont برمی‌گردانند.


دسترسی به جداول OpenType از طریق TtfTableSet

ویژگی ttf_tables یک TtfTableSet را با دسترسی‌های نوعی برای جداول عمومی OpenType برمی‌گرداند. هر ویژگی، شی جدول یا None را در صورت عدم وجود برمی‌گرداند:

ویژگی ttf_tables بر روی TtfFont یک نمونهٔ TtfTableSet برمی‌گرداند. دسترسی‌های جدول موجود:

  • head — HeadTable | None
  • hhea — HheaTable | None
  • maxp — MaxpTable | None
  • os2 — Os2Table | None
  • name — NameTable | None
  • post — PostTable | None

هر ویژگی شیء جدول را برمی‌گرداند یا None اگر آن جدول در فایل قلم وجود نداشته باشد. برای بررسی وجود جداول خاص قبل از خواندن آنها، به ویژگی‌های TtfTableSet دسترسی پیدا کنید. برای جداولی که توسط دسترسی‌کننده‌های نام‌گذاری‌شده پوشش داده نشده‌اند، از TtfTableSet.get_raw(tag) برای بازیابی بایت‌های خام با برچسب چهارحرفی OpenType استفاده کنید.


خواندن بایت‌های خام جدول

get_table_bytes(tag) بایت‌های خام هر جدول OpenType را برمی‌گرداند. برای یک نسخه ایمن در برابر None که هنگام عدم وجود جدول None را برمی‌گرداند، از get_blob(tag) استفاده کنید:

TtfFont دو روش برای دسترسی به جدول خام ارائه می‌دهد:

  • get_table_bytes(tag) -> bytes — بایت‌های خام یک جدول نام‌گذاری‌شده را برمی‌گرداند (در صورت عدم وجود خطا می‌دهد)
  • get_blob(tag) -> bytes | None — در صورت عدم وجود جدول، None را برمی‌گرداند (نسخه ایمن)

هر دو روش یک برچسب جدول چهار حرفی OpenType مانند "cmap"، "GDEF" یا "GPOS" را می‌پذیرند. وقتی جدول اختیاری است از get_blob استفاده کنید تا قبل از پردازش بتوانید None را بررسی کنید.


جفت‌های کرن

get_kern_pairs() تمام جفت‌های کرن کدگذاری‌شده در قلم را برمی‌گرداند. هر KernPair دارای left (GlyphId)، right (GlyphId) و value (int به واحدهای قلم) است:

from aspose_font import FontLoader

loaded = FontLoader.open("fonts/Roboto-Regular.ttf")

pairs = loaded.get_kern_pairs()
print(f"Kern pairs: {len(pairs)}")

for pair in pairs[:5]:
    print(f"  Left: {pair.left}  Right: {pair.right}  Value: {pair.value}")

متریک‌های قلم

متریک‌های استاندارد از طریق ویژگی metrics قابل دسترسی هستند:

from aspose_font import FontLoader

loaded = FontLoader.open("fonts/Roboto-Regular.ttf")

metrics = loaded.metrics
print(f"Units per em  : {metrics.units_per_em}")
print(f"Ascender      : {metrics.ascender}")
print(f"Descender     : {metrics.descender}")
print(f"Line gap      : {metrics.line_gap}")
print(f"Underline pos : {metrics.underline_position}")

پشتیبانی از قلم‌های متغیر

برای قلم‌های متغیر، TtfFont is_variable، variable_axes و named_instances را در دسترس می‌گذارد. برای بازیابی یک محور خاص با برچسب چهار حرفی‌اش از get_axis(tag) استفاده کنید:

from aspose_font import FontLoader

loaded = FontLoader.open("fonts/RobotoFlex.ttf")

print(f"Is variable: {loaded.is_variable}")
print(f"Axes       : {len(loaded.variable_axes)}")

متد get_axis(tag) در TtfFont یک VariableAxis را بر اساس برچسب چهار حرفی آن بازیابی می‌کند (مثلاً "wght" برای وزن، "wdth" برای عرض). اگر محور در جدول fvar قلم موجود نباشد، None را برمی‌گرداند.


تبدیل قلم‌ها

to_bytes(font_type) قلم را به فرمت دیگری تبدیل می‌کند. برای مشخص کردن هدف، از شمارش FontType استفاده کنید:

from aspose_font import FontLoader, FontType

loaded = FontLoader.open("fonts/Roboto-Regular.ttf")

ttf_bytes = loaded.to_bytes(FontType.TTF)
with open("output/Roboto-copy.ttf", "wb") as fh:
    fh.write(ttf_bytes)

print(f"Serialized: {len(ttf_bytes)} bytes")

شروع سریع

نصب کتابخانه:

.venv/bin/pip install aspose-font

یک قلم TTF را بارگذاری کنید و آن را بررسی کنید:

from aspose_font import FontLoader, FontType

loaded = FontLoader.open("Roboto-Regular.ttf")

print(f"Font name : {loaded.font_name}")
print(f"Family    : {loaded.font_family}")
print(f"Glyphs    : {loaded.num_glyphs}")
print(f"Variable  : {loaded.is_variable}")

metrics = loaded.metrics
print(f"UPM       : {metrics.units_per_em}")

ttf_bytes = loaded.to_bytes(FontType.TTF)
print(f"Serialized: {len(ttf_bytes)} bytes")

فرمت‌های پشتیبانی‌شده

قالبپسوندخواندننوشتن
TTF.ttf✓—
OTF.otf✓—
EOT.eot✓—
CFF.cff✓—
TYPE1.pfb/.pfa✓—
WOFF.woff✓—
WOFF2.woff2✓—

تمام فرمت‌ها از طریق FontLoader.open بارگذاری می‌شوند. قلم‌های TTF/OTF یک نمونه TtfFont برمی‌گردانند.


منبع باز و مجوزدهی

Aspose.Font FOSS برای Python تحت مجوز MIT منتشر شده است. می‌توانید آن را به‌صورت رایگان در پروژه‌های شخصی، تجاری و منبع باز استفاده کنید. کد منبع در GitHub موجود است و بسته از طریق PyPI به عنوان aspose-font توزیع می‌شود.


شروع به کار

منابع مرتبط