مدیریت قلمهای تم مخصوص اسکریپت در PHP
نمای کلی
یک تم ارائه میتواند خانوادههای قلم متفاوتی را برای سیستمهای نوشتاری مختلف انتخاب کند. این امکان باعث میشود متنی چندزبانه که همچنان از قلمهای تم استفاده میکند، یک طرح قلم هماهنگ داشته باشد و در عین حال برای سیریلیک، عربی، ژاپنی، گرجی، ثانا و سایر اسکریپتها از قلمهای مناسب استفاده شود.
تم FontScheme شامل یک مجموعه قلم اصلی (معمولاً برای عناوین) و یک مجموعه قلم فرعی (معمولاً برای متن بدنه) است. علاوه بر تنظیمات قلمهای لاتین و شرق‑آسیا، هر دو مجموعه Fonts نگاشتهایی از برچسبهای سیستم نوشتاری به نامهای خانواده قلم ارائه میدهند.
این مقاله نشان میدهد چگونه میتوان این نگاشتها را در تم اصلی ارائه بررسی و اصلاح کرد و تأیید کرد که تغییرات پس از ذخیره و بارگذاری مجدد باقی میمانند.
درک برچسبهای اسکریپت
متدهای قلم اسکریپت از برچسبهای چهار حرفی BCP 47 برای شناسایی سیستمهای نوشتاری استفاده میکنند. مقادیر رایج شامل:
| برچسب اسکریپت | سیستم نوشتاری |
|---|---|
Cyrl |
سیریلیک |
Arab |
عربی |
Hans |
چینی ساده |
Jpan |
ژاپنی |
Geor |
گرجی |
Thaa |
ثانا |
این نگاشتها متعلق به طرح قلم تم هستند، نه به بخشهای متنی فردی. یک ارائه میتواند نگاشتهای متفاوتی برای مجموعههای اصلی و فرعی تعریف کند و ممکن است برای برخی اسکریپتها نگاشت نداشته باشد.
دسترسی و بررسی نگاشتهای قلم اسکریپت
از Presentation::getMasterTheme برای دسترسی به تم سطح ارائه استفاده کنید. متدهای MasterTheme::getFontScheme، FontScheme::getMajor و FontScheme::getMinor دسترسی به دو مجموعه Fonts را فراهم میآورند.
برای بازیابی تمام نگاشتها از یک مجموعه، Fonts::getScriptFontMap را فراخوانی کنید. برای جستجوی یک سیستم نوشتاری خاص، Fonts::getScriptFont را با برچسب اسکریپت آن صدا بزنید. Fonts::getScriptFont در صورتی که آن مجموعه نگاشت درخواستشده را تعریف نکرده باشد، null بر میگرداند.
اصلاح نگاشتها و تأیید پایداری
از Fonts::setScriptFont برای ایجاد یا جایگزینی خانواده قلم فعلی استفاده کنید. برای حذف یک نگاشت، Fonts::removeScriptFont را به کار ببرید.
مثال جامع زیر همهٔ نگاشتهای اصلی و فرعی موجود را میخواند، قلم اصلی ژاپنی را جستجو میکند، قلم اصلی سیریلیک را تغییر میدهد، نگاشت فرعی ثانا را حذف میکند، ارائه را ذخیره مینماید و سپس برای تأیید هر دو تغییر آن را باز میخواند. برای اینکه مرحلهٔ حذف مستقل از تم اولیه باشد، مثال ابتدا تنها در زمانی که نگاشت ثانا وجود نداشته باشد، یک نگاشت ثانا ایجاد میکند.
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation();
try {
$fontScheme = $presentation->getMasterTheme()->getFontScheme();
$majorFonts = $fontScheme->getMajor();
$minorFonts = $fontScheme->getMinor();
echo "Existing major mappings:" . PHP_EOL;
$majorMappings = $majorFonts->getScriptFontMap()->iterator();
while (java_values($majorMappings->hasNext())) {
$mapping = $majorMappings->next();
echo " " . java_values($mapping->getKey()) . ": " . java_values($mapping->getValue()) . PHP_EOL;
}
echo "Existing minor mappings:" . PHP_EOL;
$minorMappings = $minorFonts->getScriptFontMap()->iterator();
while (java_values($minorMappings->hasNext())) {
$mapping = $minorMappings->next();
echo " " . java_values($mapping->getKey()) . ": " . java_values($mapping->getValue()) . PHP_EOL;
}
$japaneseFont = $majorFonts->getScriptFont("Jpan");
if (java_is_null($japaneseFont)) {
echo "No major Japanese font is defined." . PHP_EOL;
} else {
echo "Major Japanese font: " . java_values($japaneseFont) . PHP_EOL;
}
$majorFonts->setScriptFont("Cyrl", "Arial");
if (java_is_null($minorFonts->getScriptFont("Thaa"))) {
$minorFonts->setScriptFont("Thaa", "Arial");
}
$minorFonts->removeScriptFont("Thaa");
$presentation->save("script-font-mappings.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
$savedPresentation = new Presentation("script-font-mappings.pptx");
try {
$savedMajorFonts = $savedPresentation->getMasterTheme()->getFontScheme()->getMajor();
$savedMinorFonts = $savedPresentation->getMasterTheme()->getFontScheme()->getMinor();
$savedCyrillicFont = $savedMajorFonts->getScriptFont("Cyrl");
$savedThaanaFont = $savedMinorFonts->getScriptFont("Thaa");
if (!java_is_null($savedCyrillicFont) && java_values($savedCyrillicFont) === "Arial") {
echo "The Cyrillic mapping was preserved." . PHP_EOL;
} else {
echo "The Cyrillic mapping was not preserved." . PHP_EOL;
}
if (java_is_null($savedThaanaFont)) {
echo "The Thaana mapping removal was preserved." . PHP_EOL;
} else {
echo "The Thaana mapping still exists." . PHP_EOL;
}
} finally {
$savedPresentation->dispose();
}
تأیید از همان رفتار null مانند یک جستجوی عادی استفاده میکند: پس از ذخیرهٔ حذف، Fonts::getScriptFont("Thaa") برای مجموعهٔ فرعی null بر میگرداند.
تمایز نگاشتهای تم از سایر تنظیمات قلم
نگاشتهای تم مخصوص اسکریپت در انتخاب قلم شرکت میکنند، اما مسألهای متفاوت را نسبت به قالببندی مستقیم متن، جابجایی و پسزمینه حل میکنند:
| مکانیزم | هدف | تأثیر تغییر یک نگاشت تم |
|---|---|---|
| نگاشت قلم تم مخصوص اسکریپت | انتخاب یک قلم تم اصلی یا فرعی برای یک سیستم نوشتاری. | متنی که همچنان از قلم تم مربوطه استفاده میکند میتواند به خانوادهٔ قلم جدید تبدیل شود. |
| قلم اختصاصی به یک بخش متن | خانوادهٔ قلم درخواستی را برای آن بخش ثابت میکند و به تم تکیه نمیکند. | ممکن است بخش بدون تغییر بماند، زیرا قالببندی مستقیم آن انتخاب تم را نادیده میگیرد. |
| جابجایی قلم | وقتی قلم درخواستشده در دسترس نیست یا قانون جابجایی اعمال میشود، قلم دیگری جایگزین میشود. | پس از درخواست قلم عمل میکند؛ نگاشت اسکریپت تم را بازتعریف نمیکند. |
| پسزمینهٔ قلم | گلیفهای مفقودی که قلم انتخابشده دربر ندارند را تأمین میکند، اغلب برای بازههای یونیکد خاص. | پوشش گلیفهای گمشده را پر میکند؛ نگاشت تم ذخیرهشده را تغییر نمیدهد. |
برای اطلاعات بیشتر دربارهٔ دو مکانیزم آخر، به Font Substitution و Fallback Fonts مراجعه کنید.
تغییر یک نگاشت در Presentation::getMasterTheme فقط بر محتوایی که قالببندی مؤثر آن هنوز به آن تم وابسته است، تأثیر میگذارد. متن میتواند به جای آن از یک پیشنویس، طرحبندی یا اسلاید تمشفافسازی شده ارثبری کند یا از قلم اختصاصی استفاده کند. هنگام مشاهدهٔ نتایج متفاوت، سطوح آنها را بررسی کنید.
در دسترس قرار دادن قلمهای نگاشتشده و اعتبارسنجی نتیجه
یک نگاشت اسکریپت فقط نام خانوادهٔ قلم را ذخیره میکند؛ قلم مربوطه را نصب یا بارگذاری نمیکند. برای رندر و صادرات سازگار، هر قلم نگاشتشده باید در محیط نصب شده باشد یا از طریق منبع سفارشی مانند FontsLoader::loadExternalFonts یا LoadOptions::getDocumentLevelFontSources در Aspose.Slides فراهم شود. گزینههای بارگذاری موجود را در Custom Fonts ببینید.
تأیید نگاشت ذخیرهشده تنها این را ثابت میکند که تعریف تم حفظ شده است؛ نشان نمیدهد قلم در دسترس است، تمام گلیفهای مورد نیاز را دارد یا چیدمان مورد نظر را تولید میکند. برای هر سیستم نوشتاری لازم، متن نمایشی را به تصویر یا PDF رندر کنید و خروجی را بررسی کنید. این کار قلمهای مفقود، پوشش گلیف ناقص، رفتار پسزمینه و تغییرات چیدمان را پیش از توزیع ارائه شناسایی میکند. برای مثالهای رندر و صادرات، به Convert PowerPoint Presentations مراجعه کنید.
سوالات متداول
Fonts::getScriptFont وقتی اسکریپتی نگاشت نشود چه مقداری بر میگرداند؟
Fonts::getScriptFont وقتی نگاشت اسکریپت درخواستشده در مجموعهٔ اصلی یا فرعی تعریف نشده باشد، null بر میگرداند.
آیا Fonts::setScriptFont وقتی اسکریپت از پیش وجود دارد، نگاشت دوم ایجاد میکند؟
خیر. Fonts::setScriptFont هنگام نبودن نگاشت آن را ایجاد میکند و وقتی همان برچسب اسکریپت از پیش موجود است، خانوادهٔ قلم نگاشتشده را جایگزین میکند.
چرا تغییر یک نگاشت تم منجر به تغییر برخی متنها نشد؟
متن ممکن است قلم اختصاصی داشته باشد، از تم متفاوتی از طریق یک لغو ارثبری کند یا هنگام رندر تحت تأثیر جابجایی یا پسزمینه قرار گیرد. یک نگاشت اسکریپت در سطح ارائه فقط بر متنی که قالببندی مؤثر آن هنوز به مجموعهٔ قلم تم اشاره میکند، کنترل دارد.
آیا ذخیره و باز کردن مجدد برای اعتبارسنجی خروجی چندزبانه کافی است؟
خیر. باز کردن مجدد فقط پایداری دادههای تم را تأیید میکند. همچنین باید متن نمایشی از هر سیستم نوشتاری مورد نیاز را رندر کنید تا اطمینان حاصل شود قلمهای نگاشتشده در دسترس هستند و گلیفهای لازم را دارا میباشند.