پیکربندی جایگزینی قلم در ارائه‌ها با استفاده از پایتون از طریق جاوا

بررسی کلی

جایگزینی قلم (Font substitution) به Aspose.Slides اجازه می‌دهد تا هنگام رندر یا تبدیل ارائه، از قلم موجود به جای قلم غیرقابل دسترسی استفاده کند. این جایگزینی تنها بر خروجی رندر شده تأثیر می‌گذارد؛ قلم اختصاص داده شده به محتوای ارائه تغییر نمی‌کند.

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

اگر قلمی موجود باشد اما وزن بولد ویژه‌ای نداشته باشد، به بخش Handle Fonts Without a Dedicated Bold Typeface مراجعه کنید. آن بخش نحوه رستر کردن متن تحت تأثیر هنگام خروجی PDF و پیامدهای آن برای انتخاب متن، جستجو و مقیاس‌گذاری را توضیح می‌دهد.

دریافت جایگزینی‌های قلم

از متد FontsManager.getSubstitutions برای تعیین اینکه هنگام رندر ارائه چه قلم‌هایی جایگزین می‌شوند، استفاده کنید. این متد اشیاء FontSubstitutionInfo را بر می‌گرداند که نام‌های قلم اصلی و جایگزین را شناسایی می‌کنند.

مثال زیر به زبان Python تمام جایگزینی‌های قلم برای یک ارائه را فهرست می‌کند:

import jpype
import asposeslides

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

from asposeslides.api import Presentation

presentation = Presentation("Presentation.pptx")
try:
    for substitution in presentation.getFontsManager().getSubstitutions():
        print(f"{substitution.getOriginalFontName()} -> {substitution.getSubstitutedFontName()}")
finally:
    presentation.dispose()

دریافت جایگزینی‌های قلم برای اسلایدهای انتخابی

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

آرایه slides شامل شاخص‌های اسلاید به‑صورت یک‌پایه است: 1 اولین اسلاید را نشان می‌دهد. در مقابل، accessor مجموعه Presentation.getSlides از اندکس صفر‑پایه استفاده می‌کند، بنابراین همان اسلاید با presentation.getSlides().get_Item(0) دسترسی پیدا می‌کند. هنگام ساخت آرایه این تفاوت را در نظر بگیرید تا از خطاهای یک‑به‑یک جلوگیری شود.

این overload را از طریق متد Presentation.getFontsManager فراخوانی کنید. این متد فقط جایگزینی‌هایی را برمی‌گرداند که هنگام رندر اسلایدهای انتخابی تعیین شده‌اند. هر نتیجه یک شیء FontSubstitutionInfo است که شامل نام‌های قلم اصلی و جایگزین می‌شود. نتیجه محیط قلم فعلی، قوانین fallback پیکربندی‌شده، قوانین جایگزینی ذخیره‌شده در یک FontSubstRuleCollection و قلم‌های بارگذاری‌شده به‌صورت خارجی را منعکس می‌کند.

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

import jpype
import asposeslides

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

from asposeslides.api import Presentation

presentation = Presentation("Presentation.pptx")
try:
    selected_slides = jpype.JArray(jpype.JInt)([1, 3, 5])
    substitutions = list(presentation.getFontsManager().getSubstitutions(selected_slides))

    print("Substitutions for the selected slides:")
    for substitution in substitutions:
        print(f"{substitution.getOriginalFontName()} -> {substitution.getSubstitutedFontName()}")

    unique_entries = {}
    for substitution in substitutions:
        entry = f"{substitution.getOriginalFontName()} -> {substitution.getSubstitutedFontName()}"
        unique_entries.setdefault(entry.casefold(), entry)

    print("Deduplicated font preflight report:")
    for key in sorted(unique_entries):
        print(unique_entries[key])
finally:
    presentation.dispose()

کلاس FontsManager هر دو overload را فراهم می‌کند. یکی را بسته به دامنه عملیات رندر انتخاب کنید:

Overload زمان استفاده
getSubstitutions بدون آرگومان زمانی که به جایگزینی‌های کل ارائه نیاز دارید.
getSubstitutions با آرایه‌ای از اعداد صحیح جاوا زمانی که به جایگزینی‌های یک بازه انتخابی، بررسی تدریجی یا خروجی جزئی نیاز دارید.

تنظیم قوانین جایگزینی قلم

برای مشخص کردن قلمی که Aspose.Slides باید در صورت عدم دسترسی به قلم منبع استفاده کند:

  1. ارائه را بارگذاری کنید.
  2. تعاریف قلم برای قلم منبع و قلم جایگزین ایجاد کنید.
  3. یک FontSubstRule با شرط WhenInaccessible بسازید.
  4. این قانون را به یک FontSubstRuleCollection اضافه کنید.
  5. مجموعه را با استفاده از متد FontsManager.setFontSubstRuleList اختصاص دهید.
  6. ارائه را رندر یا تبدیل کنید.

مثال زیر به زبان Python، هنگام عدم دسترسی به SomeRareFont، Arial را به عنوان جایگزین تعریف می‌کند و سپس اولین اسلاید را رندر می‌کند تا نتیجه را تأیید کند. قلم جایگزین باید برای Aspose.Slides در دسترس باشد.

import jpype
import asposeslides

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

from asposeslides.api import FontData, FontSubstCondition, FontSubstRule, FontSubstRuleCollection, ImageFormat, Presentation

presentation = Presentation("Fonts.pptx")
try:
    source_font = FontData("SomeRareFont")
    substitute_font = FontData("Arial")
    substitution_rule = FontSubstRule(source_font, substitute_font, FontSubstCondition.WhenInaccessible)

    substitution_rules = FontSubstRuleCollection()
    substitution_rules.add(substitution_rule)
    presentation.getFontsManager().setFontSubstRuleList(substitution_rules)

    image = presentation.getSlides().get_Item(0).getImage(1.0, 1.0)
    try:
        image.save("slide.jpg", ImageFormat.Jpeg)
    finally:
        image.dispose()
finally:
    presentation.dispose()

محدودیت‌ها برای قلم‌های معادلات ریاضی

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

معادلات Office Math نیاز خاصی دارند. اگر یک معادله از Cambria Math استفاده کند، ممکن است Aspose.Slides برای محاسبه و رندر چیدمان معادله به همان قلم دقیقاً نیاز داشته باشد. قانونی که قلم ریاضی دیگری مانند STIX Two Math را جایگزین می‌کند، نمی‌تواند Cambria Math را برای این منظور جابجا کند و رندر ممکن است همچنان گزارش دهد که Cambria Math مورد نیاز است.

برای رندر یا تبدیل چنین ارائه‌ای، Cambria Math را در دسترس Aspose.Slides قرار دهید. آن را در سیستم‌عامل نصب کنید یا به‌عنوان یک قلم خارجی بارگذاری کنید.

این محدودیت فقط بر چیدمان معادله اعمال می‌شود. قوانین جایگزینی توضیح‌داده‌شده در بالا همچنان برای متن عادی ارائه معتبر هستند.

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

تفاوت جایگزینی قلم با جایگزینی (replacement) قلم چیست؟

Font replacement عمداً یک قلم را در تمام ارائه به قلم دیگری تغییر می‌دهد. جایگزینی قلم (font substitution) قلمی را برای خروجی رندر شده انتخاب می‌کند وقتی شرط پیکربندی‌شده برقرار باشد، مانند زمانی که قلم اصلی در دسترس نیست.

قوانین جایگزینی کی اعمال می‌شوند؟

قوانین در دنباله انتخاب قلم هنگام رندر و تبدیل شرکت می‌کنند. با WhenInaccessible، قانون فقط زمانی استفاده می‌شود که Aspose.Slides نتواند به قلم منبع دسترسی پیدا کند.

اگر قلمی موجود نباشد و قانون جایگزینی تنظیم نشده باشد چه می‌شود؟

Aspose.Slides نزدیک‌ترین قلم موجود را بر اساس فرآیند انتخاب قلم خود انتخاب می‌کند. نتیجه به قلم‌های موجود در محیط زمان اجرا بستگی دارد.

آیا می‌توانم قلم‌های خارجی را بارگذاری کنم تا از جایگزینی جلوگیری شود؟

بله. می‌توانید قلم‌های خارجی را بارگذاری کنید تا Aspose.Slides بتواند در زمان رندر و تبدیل از آن‌ها استفاده کند.

آیا Aspose قلم‌ها را همراه کتابخانه توزیع می‌کند؟

نه. شما مسئول تأمین قلم‌ها و رعایت مجوزهای آن‌ها هستید.

آیا نتایج جایگزینی بین Windows، Linux و macOS می‌توانند متفاوت باشند؟

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

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

از همان فایل‌ها و نسخه‌های قلم در تمام ماشین‌ها یا کانتینرها استفاده کنید، قلم‌های خارجی مورد نیاز را بارگذاری کنید و در صورت اجازهٔ مجوز، قلم‌ها را جاسازی کنید. همچنین می‌توانید قبل از خروجی‌گیری از FontsManager.getSubstitutions استفاده کنید تا جایگزینی‌های غیرمنتظره را شناسایی کنید.