إدارة خطوط السمة الخاصة بالنص في .NET
نظرة عامة
يمكن لثيم العرض اختيار عائلات خطوط مختلفة لأنظمة كتابة مختلفة. يتيح ذلك نصًا متعدد اللغات مازال يستخدم خطوط الثيم ليتبع مخطط خطوط منسق مع استخدام خطوط مناسبة للسيريلية والعربية واليابانية والجورجية والثانا وغيرها من الخطوط.
يحتوي الثيم الخاص بـIFontScheme على مجموعة خطوط رئيسية تُستخدم عادةً للعناوين، ومجموعة خطوط فرعية تُستخدم عادةً للنص الأساسي. بالإضافة إلى خصائص الخطوط اللاتينية والآسيوية الشرقية، تعرض كلتا المجموعتين تعيينات من وسوم أنظمة الكتابة إلى أسماء عائلات الخطوط عبر واجهةIFonts.
تظهر هذه المقالة كيفية فحص وتعديل تلك التعيينات في الثيم الرئيسي للعرض والتحقق من أن التغييرات تبقى بعد عملية الحفظ وإعادة التحميل.
فهم وسوم النص
تستخدم طرق خطوط النص وسوم نصية مكوّنة من أربعة أحرف وفق معيار BCP 47 لتحديد أنظمة الكتابة. تشمل القيم الشائعة:
| وسوم النص | نظام الكتابة |
|---|---|
Cyrl |
السيريلي |
Arab |
العربية |
Hans |
الصينية المبسطة |
Jpan |
اليابانية |
Geor |
الجورجية |
Thaa |
الثانا |
هذه التعيينات تتبع مخطط خط الثيم، لا النصوص الفردية. قد يحدد العرض تعيينات مختلفة للمجموعتين الرئيسية والفرعية، وقد يتجاوز تعيينات لبعض النصوص.
الوصول إلى وفحص تعيينات خطوط النص
استخدمPresentation.MasterTheme للوصول إلى ثيم مستوى العرض. تُعيد خصائصFontScheme.Major وFontScheme.Minor مجموعتيIFonts .
استدعِIFonts.GetScriptFontMap لاسترجاع جميع التعيينات من مجموعة. للبحث عن نظام كتابة واحد، استدعِIFonts.GetScriptFont مع وسم النص الخاص به. GetScriptFont تُرجع null عندما لا تحدد تلك المجموعة التعيين المطلوب.
تعديل التعيينات والتحقق من الاستمرارية
استخدمIFonts.SetScriptFont لإنشاء تعيين أو استبدال عائلة الخط الحالية. استخدمIFonts.RemoveScriptFont لإزالة تعيين.
المثال التالي يقرأ جميع التعيينات الرئيسية والفرعية الحالية، يبحث عن خط اليابانية الرئيسي، يغيّر خط السيريلية الرئيسي، يزيل تعيين الثانا الفرعي، يحفظ العرض، ويعيد فتحه للتحقق من كلا التغييرين. لجعل خطوة الإزالة مستقلة عن الثيم الأولي، ينشئ المثال تعيين الثانا فقط عندما لا يكون معرفًا مسبقًا.
using System;
using Aspose.Slides;
using Aspose.Slides.Export;
static void PrintScriptFontMap(string label, IFonts fonts)
{
Console.WriteLine(label);
foreach (var mapping in fonts.GetScriptFontMap())
{
Console.WriteLine($" {mapping.Key}: {mapping.Value}");
}
}
using var presentation = new Presentation();
var fontScheme = presentation.MasterTheme.FontScheme;
var majorFonts = fontScheme.Major;
var minorFonts = fontScheme.Minor;
PrintScriptFontMap("Existing major mappings:", majorFonts);
PrintScriptFontMap("Existing minor mappings:", minorFonts);
var japaneseFont = majorFonts.GetScriptFont("Jpan");
if (japaneseFont is null)
{
Console.WriteLine("No major Japanese font is defined.");
}
else
{
Console.WriteLine($"Major Japanese font: {japaneseFont}");
}
majorFonts.SetScriptFont("Cyrl", "Arial");
if (minorFonts.GetScriptFont("Thaa") is null)
{
minorFonts.SetScriptFont("Thaa", "Arial");
}
minorFonts.RemoveScriptFont("Thaa");
presentation.Save("script-font-mappings.pptx", SaveFormat.Pptx);
using var savedPresentation = new Presentation("script-font-mappings.pptx");
var savedMajorFonts = savedPresentation.MasterTheme.FontScheme.Major;
var savedMinorFonts = savedPresentation.MasterTheme.FontScheme.Minor;
var savedCyrillicFont = savedMajorFonts.GetScriptFont("Cyrl");
var savedThaanaFont = savedMinorFonts.GetScriptFont("Thaa");
if (savedCyrillicFont == "Arial")
{
Console.WriteLine("The Cyrillic mapping was preserved.");
}
else
{
Console.WriteLine("The Cyrillic mapping was not preserved.");
}
if (savedThaanaFont is null)
{
Console.WriteLine("The Thaana mapping removal was preserved.");
}
else
{
Console.WriteLine("The Thaana mapping still exists.");
}
التحقق يستخدم نفس سلوك null كبحث عادي: بعد حفظ خطوة الإزالة، GetScriptFont("Thaa") تُرجع null للمجموعة الفرعية.
تمييز تعيينات السمة عن إعدادات الخطوط الأخرى
تشارك تعيينات خطوط الثيم الخاصة بالنص في اختيار الخط، لكنها تحل مشكلة مختلفة عن تنسيق النص المباشر، والاستبدال، والاحتياطي:
| آلية | الغرض | تأثير تغيير تعيين السمة |
|---|---|---|
| تعيين خط السمة الخاص بالنص | يختار خط سمة رئيسي أو فرعي لنظام كتابة. | النص الذي لا يزال يستخدم خط السمة المقابل يمكن أن يُحل إلى عائلة الخط الجديدة. |
| الخط المعين صراحةً لجزء نص | يثبت عائلة الخط المطلوبة لهذا الجزء بدلاً من الاعتماد على السمة. | قد يبقى الجزء غير متغير لأن تنسيقه المباشر يتجاوز اختيار السمة. |
| استبدال الخط | يستبدل الخط المطلوب عندما يكون غير متوفر أو عندما تنطبق قاعدة استبدال. | يحدث بعد طلب الخط؛ لا يعيد تعريف تعيين النص في السمة. |
| احتياطي الخط | يوفّر رموزًا لا يحتويها الخط المحدد، غالبًا لنطاقات يونيكود معينة. | يملأ النقص في الرموز؛ لا يغيّر تعيين السمة المخزن. |
لمزيد من المعلومات حول الآليتين الأخيرتين، راجع Font Substitution وFallback Fonts.
تغيير تعيين فيPresentation.MasterTheme يؤثر فقط على المحتوى الذي لا يزال تنسيقه الفعّال يعتمد على ذلك الثيم. قد يرث النص بدلًا من ذلك تجاوز سمة من رئيس، أو تخطيط، أو شريحة، أو يستخدم خطًا معينًا صراحةً. افحص تلك المستويات عندما لا يتبع النتيجة الظاهرة تعيين مستوى العرض.
إتاحة الخطوط المعينة والتحقق من النتيجة
يخزن تعيين النص اسم عائلة الخط؛ لا يثبت أو يحمل ملف الخط المقابل. لضمان عرض وتصدير متسق، يجب أن يكون كل خط معين مثبتًا في البيئة أو مُزودًا إلى Aspose.Slides عبر مصدر مخصص مثل FontsLoader.LoadExternalFonts أو LoadOptions.DocumentLevelFontSources. راجع Custom Fonts لخيارات التحميل المتاحة.
التحقق من حفظ التعيين يؤكد فقط أن تعريف السمة تم الحفاظ عليه. لا يثبت أن الخط متاح، أو يحتوي على جميع الرموز المطلوبة، أو ينتج التخطيط المقصود. قم بتصوير نص تمثيلي لكل نظام كتابة مطلوب إلى صورة أو PDF وافحص الناتج. سيساعد ذلك في اكتشاف الخطوط المفقودة، أو نقص الرموز، أو سلوك الاحتياطي، أو تغييرات التخطيط قبل توزيع العرض. راجع Convert PowerPoint Presentations لأمثلة على العرض والتصدير.
الأسئلة المتكررة
ماذا تُرجع GetScriptFont عندما لا يكون النص مُعينًا؟
IFonts.GetScriptFont تُرجع null عندما لا يكون تعيين النص المطلوب معرفًا في تلك المجموعة الرئيسية أو الفرعية.
هل SetScriptFont يضيف تعيينًا ثانيًا عندما يكون النص موجودًا بالفعل؟
لا. IFonts.SetScriptFont يخلق التعيين عندما يكون مفقودًا ويستبدل عائلة الخط المعينة عندما يكون وسم النص موجودًا بالفعل.
لماذا لم يغيّر تغيير تعيين السمة بعض النصوص؟
قد يكون النص قد عُيّن له خط صراحةً، أو ورث سمة مختلفة عبر تجاوز، أو تأثر بالاستبدال أو الاحتياطي أثناء العرض. يتحكم تعيين النص في مستوى العرض فقط في النصوص التي لا يزال تنسيقها الفعّال يشير إلى مجموعة خطوط السمة تلك.
هل حفظ وإعادة فتح كافٍ للتحقق من المخرجات المتعددة اللغات؟
لا. إعادة الفتح تَتحقق من بقاء بيانات السمة. يجب أيضًا عرض نص تمثيلي من كل نظام كتابة مطلوب لتأكيد توفر الخطوط المعينة واحتوائها على الرموز الضرورية.