إدارة خطوط السمة المحددة حسب النص البرمجي في بايثون

نظرة عامة

يمكن لسمة العرض اختيار عائلات خطوط مختلفة لأنظمة كتابة مختلفة. يتيح ذلك للنص متعدد اللغات الذي لا يزال يستخدم خطوط السمة أن يتبع مخطط خطوط منسّق واحد مع استخدام خطوط ملائمة للسيريلية والعربية واليابانية والجورجية والظـآنـا وغيرها من النصوص.

تحتوي سمة العرض على FontScheme التي تشمل مجموعة خطوط رئيسية، تُستخدم عادةً للعناوين، ومجموعة خطوط فرعية، تُستخدم عادةً للنص الأساسي. بالإضافة إلى خصائص الخطوط اللاتينية والآسيوية الشرقية، تكشف كلتا المجموعتين عن تعيينات من علامات نظام الكتابة إلى أسماء عائلات الخطوط عبر فئة Fonts.

توضح هذه المقالة كيفية فحص وتعديل تلك التعيينات في سمة القالب الرئيسي للعرض والتحقق من بقاء التغييرات بعد دورة حفظ وإعادة تحميل.

فهم علامات النصوص البرمجية

تستخدم طرق خطوط النصوص البرمجية تسعات فرعية من أربعة أحرف وفقاً لـ BCP 47 لتحديد أنظمة الكتابة. القيم الشائعة تشمل:

علامة النص نظام الكتابة
Cyrl السيريلية
Arab العربية
Hans الصينية المبسطة
Jpan اليابانية
Geor الجورجية
Thaa الظـآنـا

تنتمي هذه التعيينات إلى مخطط خطوط السمة، لا إلى أجزاء النص الفردية. قد يحدد العرض تعيينات مختلفة للمجموعتين الرئيسيتين والفرعيتين، وقد يترك تعيينات لبعض النصوص البرمجية غير معرفة.

الوصول إلى تعيينات خطوط النصوص البرمجية وفحصها

استخدم Presentation.master_theme للوصول إلى سمة العرض على مستوى الملف. تعيد الخاصيتان FontScheme.major وFontScheme.minor مجموعتي Fonts المت对应تين.

استدعِ Fonts.get_script_font_map لاسترداد جميع التعيينات من مجموعة معينة. للبحث عن نظام كتابة واحد، استدعِ Fonts.get_script_font مع علامة النص البرمجي الخاصة به. تُعيد get_script_font القيمة None عندما لا تُعرّف تلك المجموعة التعيين المطلوب.

تعديل التعيينات والتحقق من الاستمرارية

استخدم Fonts.set_script_font لإنشاء تعيين أو استبدال عائلة الخط الحالية. استخدم Fonts.remove_script_font لإزالة تعيين.

يُظهر المثال التالي خطوة بخطوة كيفية قراءة جميع التعيينات الرئيسة والفرعية الحالية، والبحث عن الخط الياباني الرئيس، وتغيير الخط السيريلية الرئيس، وإزالة تعيين الظـآنـا الفرعي، ثم حفظ العرض وإعادة فتحه للتحقق من كلا التغيّرين. لجعل خطوة الإزالة مستقلة عن السمة الأولية، ينشئ المثال تعيينًا للظـآنـا فقط عندما لا يكون مُعرّفاً مسبقاً.

import aspose.slides as slides


def print_script_font_map(label, fonts):
    print(label)
    for mapping in fonts.get_script_font_map():
        print(f"  {mapping.key}: {mapping.value}")


with slides.Presentation() as presentation:
    font_scheme = presentation.master_theme.font_scheme
    major_fonts = font_scheme.major
    minor_fonts = font_scheme.minor

    print_script_font_map("Existing major mappings:", major_fonts)
    print_script_font_map("Existing minor mappings:", minor_fonts)

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

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

    if minor_fonts.get_script_font("Thaa") is None:
        minor_fonts.set_script_font("Thaa", "Arial")

    minor_fonts.remove_script_font("Thaa")
    presentation.save("script-font-mappings.pptx", slides.export.SaveFormat.PPTX)

with slides.Presentation("script-font-mappings.pptx") as saved_presentation:
    saved_major_fonts = saved_presentation.master_theme.font_scheme.major
    saved_minor_fonts = saved_presentation.master_theme.font_scheme.minor
    saved_cyrillic_font = saved_major_fonts.get_script_font("Cyrl")
    saved_thaana_font = saved_minor_fonts.get_script_font("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.")

تستخدم عملية التحقق سلوك None نفسه كما في البحث العادي: بعد حفظ عملية الإزالة، تُعيد get_script_font("Thaa") القيمة None للمجموعة الفرعية.

تمييز تعيينات السمة عن إعدادات الخطوط الأخرى

تشارك تعيينات سمة النص البرمجي في اختيار الخط، لكنها تحل مشكلة مختلفة عن تنسيق النص المباشر، والاستبدال، والاحتياطي:

الآلية الغرض تأثير تغيير تعيين السمة
تعيين سمة الخط البرمجي المحدد بنص يختار خط سمة رئيسي أو فرعي لنظام كتابة معين. يمكن للنص الذي لا يزال يستخدم خط السمة المقابل أن يُحل إلى العائلة الجديدة المعينة.
الخط المعين صراحةً لجزء نص يثبت عائلة الخط المطلوبة على ذلك الجزء بدلاً من الاعتماد على السمة. قد يبقى الجزء دون تغيير لأن تنسيقه المباشر يتجاوز اختيار السمة.
استبدال الخط يستبدل الخط المطلوب عندما يكون غير متوفر أو عندما تنطبق قاعدة استبدال. يحدث بعد طلب الخط؛ لا يُعيد تعريف تعيين السمة للنص البرمجي.
الاحتياطي الخطّي يوفّر رموزاً غير موجودة في الخط المختار، غالباً لنطاقات يونيكود محددة. يملأ الفجوات في الرموز؛ لا يُغيّر تعيين السمة المخزن.

لمزيد من المعلومات حول الآليتين الأخيرتين، راجع Font Substitution وFallback Fonts.

تغيّر تعيين داخل Presentation.master_theme يؤثر فقط على المحتوى الذي لا يزال تنسيقه الفعّال يعتمد على تلك السمة. قد يرث النص تعيين سمة من القالب الرئيسي، أو تخطيط، أو شريحة، أو يستخدم خطًا معينًا صراحةً. افحص تلك المستويات عندما لا يتبع النتيجة الظاهرة تعيين السمة على مستوى العرض.

إتاحة الخطوط المعينة والتحقق من النتيجة

يخزن تعيين النص البرمجي اسم عائلة الخط؛ ولا يقوم بتثبيت أو تحميل ملف الخط المقابل. لضمان العرض والتصدير المتسقين، يجب تثبيت كل خط معين في البيئة أو تزويده إلى Aspose.Slides عبر مصدر مخصص مثل FontsLoader.load_external_fonts أو LoadOptions.document_level_font_sources. راجع Custom Fonts لمعرفة خيارات التحميل المتاحة.

التحقق من حفظ التعيين يؤكد فقط أن تعريف السمة تم حفظه. لا يثبت أن الخط متاح، أو يحتوي على جميع الرموز المطلوبة، أو ينتج التخطيط المقصود. احرص على تصيير نص ممثل لكل نظام كتابة مطلوب إلى صورة أو PDF وفحص الناتج. يكتشف ذلك الخطوط المفقودة، أو نقص تغطية الرموز، أو سلوك الاحتياطي، أو تغيّر التخطيط قبل توزيع العرض. راجع Convert PowerPoint Presentations لأمثلة التصيير والتصدير.

الأسئلة الشائعة

ماذا تُعيد get_script_font عندما لا يكون النص البرمجي معينًا؟

Fonts.get_script_font تُعيد None عندما لا يكون تعيين النص البرمجي المطلوب مُعرّفًا في تلك المجموعة الرئيسية أو الفرعية.

هل يضيف set_script_font تعيينًا ثانيًا عندما يكون النص موجودًا بالفعل؟

لا. Fonts.set_script_font تُنشئ التعيين عندما يكون مفقودًا وتستبدل عائلة الخط المعينة عندما تكون علامة النص البرمجي موجودة مسبقًا.

لماذا لم يُغيّر تعديل سمة النص البرمجي بعض النصوص؟

قد يكون النص لديه خط معين صراحةً، أو يرث سمة مختلفة عبر تجاوز، أو يتأثر بالاستبدال أو الاحتياطي أثناء التصيير. يتحكم تعيين النص البرمجي على مستوى العرض فقط في النص الذي لا يزال تنسيقه الفعّال يشير إلى مجموعة خطوط السمة تلك.

هل يكفي حفظ وإعادة فتح العرض للتحقق من مخرجات متعددة اللغات؟

لا. إعادة الفتح تتحقق فقط من بقاء بيانات السمة. يجب أيضًا تصيير نص ممثل من كل نظام كتابة مطلوب للتأكد من توفر الخطوط المعينة واحتوائها على الرموز اللازمة.