مقدمه
Type 1 قالب فونت مقیاسپذیر اصلی ادوبی است که پیش از TrueType و OpenType وجود داشته است. فونتهای Type 1 از دو فایل تشکیل میشوند: یک فایل .pfb (Printer Font Binary) که برنامه فونت رمزگذاریشده را شامل میشود، و یک فایل .afm (Adobe متریکهای قلم) که دادههای کرنینگ و معیارها را دارد. اگرچه توسط OpenType جایگزین شدهاند، فونتهای Type 1 همچنان در جریانهای کاری ناشرانه، خطوط لوله PostScript و اسناد بایگانی رایج هستند.
Aspose.Font FOSS برای Python دسترسی مستقیم به درونساختهای Type 1 را از طریق Type1Font، Type1FontData، Type1Serializer و Type1Interpreter فراهم میکند. میتوانید فایلهای PFB یا PFA را از طریق FontLoader.open بارگذاری کنید، متادیتای برنامهنویسی فونت تعبیهشده را بررسی کنید، charstrings را به مسیرهای گلیف تبدیل کنید، و فونتها را به فرمت PFB یا PFA دوباره سریالسازی کنید.
کتابخانه در PyPI به عنوان aspose-font منتشر شده و تحت مجوز MIT License میباشد. این کتابخانه هیچ وابستگی تجاری اجباری ندارد و بر روی Python 3 استاندارد اجرا میشود.
ویژگیهای کلیدی
بارگذاری فونتهای Type 1
از FontLoader.open برای بارگذاری یک فایل PFB یا PFA استفاده کنید. شیء بازگشتی هم رابط استاندارد Font را نمایش میدهد و هم عملکرد ویژه Type 1 را از طریق کلاس Type1Font فراهم میکند:
from aspose_font import FontLoader
loaded = FontLoader.open("fonts/Courier.pfb")
print(loaded.font_name) # e.g. "Courier"
print(loaded.font_family) # e.g. "Courier"
print(loaded.num_glyphs) # number of defined glyphs
print(loaded.font_style) # style string, e.g. "Regular"
FontLoader.open فرمت Type 1 را بهصورت خودکار از هدر فایل تشخیص میدهد. فایلهای PFB و PFA هر دو پشتیبانی میشوند.
در حال بارگذاری معیارهای AFM
قلمهای Type 1 معیارهای خود را در یک فایل .afm جداگانه حمل میکنند. کلاس Type1Font یک متد load_afm(path) را ارائه میدهد که دادههای AFM را به شیء قلم بارگذاری شده الصاق میکند و امکان جستجوی جفتهای کرن را از طریق get_kern_pairs() فراهم میسازد.
بدون فایل AFM، get_kern_pairs() فهرست خالی را بازمیگرداند زیرا دادههای کرن در فایل AFM قرار دارند و نه در برنامه PFB خود. متد load_afm رشته مسیر فایلی را میپذیرد که به فایل .afm همراه اشاره میکند.
دسترسی به فرادادهٔ Type1FontData
کلاس Type1FontData دیکشنری برنامه قلم تعبیهشده در فایل Type 1 را ارائه میدهد. این دیکشنری شامل معیارها، جعبه محدوده، بردار رمزگذاری، charstrings و subroutines است:
from aspose_font.type1.data import Type1FontData
# Type1FontData is the font program dictionary parsed from the PFB
# Access its properties to inspect the raw PostScript font data
ویژگیهای Type1FontData:
font_name(str) — PostScript نام قلمfull_name(str) — نام کامل قابل خواندن برای انسانfamily_name(str) — خانواده قلمweight(str) — رشته وزن (مثلاً"Medium")italic_angle(float) — زاویهٔ ایتالیک به درجهis_fixed_pitch(bool) — صحیح برای قلمهای تکعرضfont_bbox(tuple[int, int, int, int]) — جعبهٔ محدودکننده(llx, lly, urx, ury)underline_position(int) — موقعیت زیرخط به واحدهای قلمunderline_thickness(int) — ضخامت خط زیرخطencoding(list[str]) — بردار کدگذاری ۲۵۶-اسلات (PostScript نامهای گلیف)charstrings(dict[str, bytes]) — نگاشت نام گلیف → بایتهای charstringsubrs(list[bytes]) — رشتههای بایت زیرروال که توسط موتور charstring استفاده میشوندlen_iv(int) — پارامتر رمزنگاری lenIV
تفسیر Charstrings
Type1Interpreter برنامههای charstring نوع1 را به خطوط GlyphPath تبدیل میکند. بایتهای raw charstring را از Type1FontData.charstrings به interpret بدهید:
from aspose_font.type1.interpreter import Type1Interpreter
interpreter = Type1Interpreter()
charstring = b"\x0e" # seac or other charstring bytes
glyph_path, stack_depth = interpreter.interpret(charstring)
for cmd in glyph_path.commands:
print(cmd)
interpret یک تاپل (GlyphPath, int) برمیگرداند. GlyphPath شامل دستورات رسم برای خطوط گلیف است. عدد صحیح عمق نهایی پشته پس از اجرا را نشان میدهد که برای اشکالزدایی charstrings خراب مفید است.
سریالسازی به PFB و PFA
Type1Serializer یک فونت Type 1 بارگذاریشده را به قالب دودویی PFB یا متن PFA برمیگرداند. هر دو روش هر نمونهای از Font را میپذیرند و بایتهای خام را برمیگردانند:
from aspose_font import FontLoader
from aspose_font.type1.serializer import Type1Serializer
loaded = FontLoader.open("fonts/Courier.pfb")
# Serialize to PFB (binary) format
pfb_bytes = Type1Serializer.serialize_pfb(loaded)
with open("output/Courier_copy.pfb", "wb") as fh:
fh.write(pfb_bytes)
# Serialize to PFA (text) format
pfa_bytes = Type1Serializer.serialize_pfa(loaded)
with open("output/Courier_copy.pfa", "wb") as fh:
fh.write(pfa_bytes)
print(f"PFB: {len(pfb_bytes)} bytes")
print(f"PFA: {len(pfa_bytes)} bytes")
متریکهای قلم
متریکها و کدگذاری از طریق رابط استاندارد Font قابل دسترسی هستند:
from aspose_font import FontLoader
loaded = FontLoader.open("fonts/Courier.pfb")
metrics = loaded.metrics
print(f"Units per em : {metrics.units_per_em}")
print(f"Ascender : {metrics.ascender}")
print(f"Descender : {metrics.descender}")
print(f"Underline pos : {metrics.underline_position}")
print(f"Underline tck : {metrics.underline_thickness}")
شروع سریع
نصب کتابخانه:
.venv/bin/pip install aspose-font
یک فونت PFB را بارگیری کنید و آن را بررسی کنید:
from aspose_font import FontLoader
from aspose_font.type1.serializer import Type1Serializer
loaded = FontLoader.open("Courier.pfb")
print(f"Font name : {loaded.font_name}")
print(f"Family : {loaded.font_family}")
print(f"Style : {loaded.font_style}")
print(f"Glyphs : {loaded.num_glyphs}")
metrics = loaded.metrics
print(f"UPM : {metrics.units_per_em}")
# Round-trip: serialize back to PFB
pfb_bytes = Type1Serializer.serialize_pfb(loaded)
print(f"Serialized: {len(pfb_bytes)} bytes")
فرمتهای پشتیبانیشده
| قالب | پسوند | خواندن | نوشتن |
|---|---|---|---|
| TTF | .ttf | ✓ | — |
| OTF | .otf | ✓ | — |
| EOT | .eot | ✓ | — |
| CFF | .cff | ✓ | — |
| TYPE1 | .pfb/.pfa | ✓ | — |
| WOFF | .woff | ✓ | — |
| WOFF2 | .woff2 | ✓ | — |
فونتهای Type 1 از طریق FontLoader.open بارگذاری میشوند و از طریق Type1Serializer سریالسازی میشوند.
منبع باز و مجوزدهی
Aspose.Font FOSS برای Python تحت مجوز MIT منتشر شده است. میتوانید آن را در پروژههای شخصی، تجاری و منبع باز بدون هزینه استفاده کنید. کد منبع در GitHub موجود است و بسته از طریق PyPI به عنوان aspose-font توزیع میشود.