مدیریت قلم‌های تم مخصوص اسکریپت در پایتون از طریق جاوا

نمای کلی

یک تم ارائه می‌تواند خانواده‌های قلم متفاوتی را برای سیستم‌های نوشتاری مختلف انتخاب کند. این امکان را می‌دهد که متن چندزبانه که هنوز از قلم‌های تم استفاده می‌کند، یک طرح قلم هماهنگ را دنبال کند در حالی که از قلم‌های مناسب برای سیریلیک، عربی، ژاپنی، گرجی، ثانا و سایر اسکریپت‌ها استفاده می‌کند.

تم شامل مجموعه قلم اصلی (FontScheme) است که معمولاً برای سرفصل‌ها استفاده می‌شود و مجموعه قلم جزئی که معمولاً برای متن اصلی به کار می‌رود. علاوه بر تنظیمات قلم‌های لاتین و شرق آسیایی، هر دو مجموعه نگاشت‌هایی از برچسب‌های سیستم نوشتاری به نام‌های خانواده قلم از طریق کلاس Fonts ارائه می‌دهند.

این مقاله نشان می‌دهد چگونه این نگاشت‌ها را در تم اصلی ارائه بررسی و تغییر داده و اطمینان حاصل می‌کند که تغییرات پس از ذخیره‑و‑بارگذاری حفظ می‌شوند.

درک برچسب‌های اسکریپت

متدهای قلم اسکریپت از زیربرچسب‌های چهار حرفی BCP 47 برای شناسایی سیستم‌های نوشتاری استفاده می‌کنند. مقدارهای رایج شامل موارد زیر است:

برچسب اسکریپت سیستم نوشتاری
Cyrl سیریلیک
Arab عربی
Hans چینی ساده‌سازی شده
Jpan ژاپنی
Geor گرجی
Thaa ثانا

این نگاشت‌ها به طرح قلم تم تعلق دارند، نه به بخش‌های متنی جداگانه. یک ارائه ممکن است نگاشت‌های متفاوتی برای مجموعه‌های اصلی و جزئی تعریف کند و ممکن است برخی از اسکریپت‌ها را حذف کند.

دسترسی و بازرسی نگاشت‌های قلم اسکریپت

از Presentation.getMasterTheme برای دسترسی به تم سطح ارائه استفاده کنید. متدهای FontScheme.getMajor و FontScheme.getMinor دو مجموعه Fonts را برمی‌گردانند.

با فراخوانی Fonts.getScriptFontMap می‌توانید تمام نگاشت‌ها را از یک مجموعه دریافت کنید. برای جستجوی یک سیستم نوشتاری، Fonts.getScriptFont را همراه با برچسب اسکریپت آن فراخوانی کنید. getScriptFont زمانی که آن مجموعه نگاشت درخواست‌شده را تعریف نکرده باشد، None برمی‌گرداند.

تغییر نگاشت‌ها و تأیید پایداری

از Fonts.setScriptFont برای ایجاد یک نگاشت یا جایگزینی خانواده قلم فعلی استفاده کنید. برای حذف یک نگاشت، از Fonts.removeScriptFont بهره بگیرید.

مثال کامل زیر تمام نگاشت‌های اصلی و جزئی موجود را می‌خواند، قلم اصلی ژاپنی را جستجو می‌کند، قلم اصلی سیریلیک را تغییر می‌دهد، نگاشت جزئی ثانا را حذف می‌کند، ارائه را ذخیره و سپس باز می‌کند تا هر دو تغییر را تأیید نماید. برای اینکه گام حذف مستقل از تم اولیه باشد، مثال ابتدا فقط در صورتی که نگاشت ثانا تعریف نشده باشد، یک نگاشت ثانا ایجاد می‌کند.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat

presentation = Presentation()
try:
    font_scheme = presentation.getMasterTheme().getFontScheme()
    major_fonts = font_scheme.getMajor()
    minor_fonts = font_scheme.getMinor()

    print("Existing major mappings:")
    major_mappings = major_fonts.getScriptFontMap().iterator()
    while major_mappings.hasNext():
        mapping = major_mappings.next()
        print(f"  {mapping.getKey()}: {mapping.getValue()}")

    print("Existing minor mappings:")
    minor_mappings = minor_fonts.getScriptFontMap().iterator()
    while minor_mappings.hasNext():
        mapping = minor_mappings.next()
        print(f"  {mapping.getKey()}: {mapping.getValue()}")

    japanese_font = major_fonts.getScriptFont("Jpan")
    if japanese_font is None:
        print("No major Japanese font is defined.")
    else:
        print(f"Major Japanese font: {japanese_font}")

    major_fonts.setScriptFont("Cyrl", "Arial")

    if minor_fonts.getScriptFont("Thaa") is None:
        minor_fonts.setScriptFont("Thaa", "Arial")

    minor_fonts.removeScriptFont("Thaa")
    presentation.save("script-font-mappings.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

saved_presentation = Presentation("script-font-mappings.pptx")
try:
    saved_major_fonts = saved_presentation.getMasterTheme().getFontScheme().getMajor()
    saved_minor_fonts = saved_presentation.getMasterTheme().getFontScheme().getMinor()
    saved_cyrillic_font = saved_major_fonts.getScriptFont("Cyrl")
    saved_thaana_font = saved_minor_fonts.getScriptFont("Thaa")

    if saved_cyrillic_font == "Arial":
        print("The Cyrillic mapping was preserved.")
    else:
        print("The Cyrillic mapping was not preserved.")

    if saved_thaana_font is None:
        print("The Thaana mapping removal was preserved.")
    else:
        print("The Thaana mapping still exists.")
finally:
    saved_presentation.dispose()

تأیید از همان رفتار None در یک جستجوی عادی استفاده می‌کند: پس از ذخیره‌سازی حذف، getScriptFont("Thaa") برای مجموعه جزئی None برمی‌گرداند.

تمایز نگاشت‌های تم از سایر تنظیمات قلم

نگاشت‌های تم مخصوص اسکریپت در انتخاب قلم نقش دارند، اما مشکلی متفاوت را نسبت به قالب‌بندی مستقیم متن، جایگزینی و فالت حل می‌کنند:

مکانیزم هدف اثر تغییر یک نگاشت تم
نگاشت قلم تم مخصوص اسکریپت یک قلم تم اصلی یا جزئی را برای یک سیستم نوشتاری انتخاب می‌کند. متنی که هنوز از قلم تم مربوطه استفاده می‌کند می‌تواند به خانواده قلم جدید نگاشت‌شده حل شود.
قلم اختصاص داده‌شده صریحاً به یک بخش متن خانواده قلم درخواست‌شده را بر روی آن بخش ثابت می‌کند به جای اتکای به تم. این بخش ممکن است بدون تغییر بماند زیرا قالب‌بندی مستقیم آن انتخاب تم را بازنویسی می‌کند.
جایگزینی قلم وقتی قلم درخواست‌شده در دسترس نیست یا قاعده جایگزینی اعمال می‌شود، قلم را جایگزین می‌کند. پس از درخواست قلم عمل می‌کند؛ نگاشت اسکریپت تم را بازتعریف نمی‌کند.
قلم فالت علائم (glyph)ی که قلم انتخاب‌شده شامل آنها نیست را فراهم می‌کند، اغلب برای بازه‌های خاص یونی‌کد. پوشش گلیف‌های گمشده را تکمیل می‌کند؛ نگاشت تم ذخیره‌شده را تغییر نمی‌دهد.

برای اطلاعات بیشتر درباره دو مکانیزم آخر، به جایگزینی قلم و قلم‌های فالت مراجعه کنید.

تغییر یک نگاشت در Presentation.getMasterTheme فقط بر محتوایی که قالب‌بندی مؤثر آن هنوز به آن تم وابسته است تأثیر می‌گذارد. متن می‌تواند به جای آن، یک تغییر تم از یک مستر، چیدمان یا اسلاید به ارث ببرد یا از قلم اختصاص داده‌شده صریحاً استفاده کند. وقتی نتایج قابل مشاهده با نگاشت سطح ارائه مطابقت ندارند، این سطوح را بررسی کنید.

در دسترس قرار دادن قلم‌های نگاشت‌شده و اعتبارسنجی نتیجه

یک نگاشت اسکریپت نام یک خانواده قلم را ذخیره می‌کند؛ قلم مربوطه را نصب یا بارگذاری نمی‌کند. برای رندر و خروجی یکسان، هر قلم نگاشت‌شده باید در محیط نصب شده باشد یا از طریق منبع سفارشی مانند FontsLoader.loadExternalFonts یا LoadOptions.getDocumentLevelFontSources به Aspose.Slides ارائه شود. گزینه‌های بارگذاری موجود را در قلم‌های سفارشی ببینید.

تأیید نگاشت ذخیره‌شده فقط نشان می‌دهد تعریف تم حفظ شده است. این تضمین نمی‌کند که قلم در دسترس باشد، تمام گلیف‌های لازم را داشته باشد یا چیدمان مطلوب را تولید کند. متن نمونه برای هر سیستم نوشتاری مورد نیاز را به تصویر یا PDF رندر کنید و خروجی را بررسی کنید. این کار قلم‌های گمشده، پوشش ناقص گلیف، رفتار فالت و تغییرات چیدمان را قبل از توزیع ارائه شناسایی می‌کند. برای مثال‌های رندر و خروجی به تبدیل ارائه‌های پاورپوینت مراجعه کنید.

سؤالات متداول

getScriptFont وقتی یک اسکریپت نگاشت نشده است چه مقدار برمی‌گرداند؟

[Fonts.getScriptFont](https://reference.aspose.com/slides/fa/python-java/aspose.slides/fonts/#getScriptFont) وقتی نگاشت اسکریپت درخواست‌شده در آن مجموعه قلم اصلی یا جزئی تعریف نشده باشد، None برمی‌گرداند.

آیا setScriptFont وقتی اسکریپت قبلاً وجود داشته باشد، یک نگاشت دوم اضافه می‌کند؟

خیر. [Fonts.setScriptFont](https://reference.aspose.com/slides/fa/python-java/aspose.slides/fonts/#setScriptFont) زمانی که نگاشت موجود نباشد، آن را ایجاد می‌کند و وقتی برچسب اسکریپت همان‌طور موجود باشد، خانواده قلم نگاشت‌شده را جایگزین می‌کند.

چرا تغییر یک نگاشت تم بعضی متن‌ها را تغییر نداد؟

متن ممکن است قلم اختصاص داده‌شده صریحاً داشته باشد، تم متفاوتی را از طریق یک بازنویسی به ارث ببرد یا در رندر تحت تأثیر جایگزینی یا فالت باشد. یک نگاشت اسکریپت سطح ارائه فقط بر متنی که قالب‌بندی مؤثر آن هنوز به مجموعه قلم تم آن ارجاع می‌دهد، کنترل دارد.

آیا ذخیره و بازگشایی کافی است تا خروجی چندزبانه اعتبارسنجی شود؟

خیر. بازگشائی فقط پایداری داده‌های تم را تأیید می‌کند. همچنین متن نمونه‌ای از هر سیستم نوشتاری مورد نیاز را رندر کنید تا از در دسترس بودن قلم‌های نگاشت‌شده و داشتن گلیف‌های لازم اطمینان حاصل کنید.