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

تغییر رنگ تم
یک تم PowerPoint برای عناصر مختلف اسلاید مجموعهای خاص از رنگها را استفاده میکند. اگر پیشفرضها را دوست ندارید، میتوانید با اعمال رنگهای جدید تم، آنها را تغییر دهید. برای انتخاب رنگ تم جدید، Aspose.Slides مقادیر را در شمارنده SchemeColor ارائه میدهد.
این کد Python نشان میدهد چگونه رنگ لهیزه تم را تغییر دهیم:
import aspose.pydrawing as draw
import aspose.slides as slides
with slides.Presentation() as presentation:
slide = presentation.slides[0]
shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 10, 100, 100)
shape.fill_format.fill_type = slides.FillType.SOLID
shape.fill_format.solid_fill_color.scheme_color = slides.SchemeColor.ACCENT4
میتوانید مقدار مؤثر رنگ حاصل را به صورت زیر به دست آورید:
fill_effective = shape.fill_format.get_effective()
print("{0} ({1})".format(fill_effective.solid_fill_color.name, fill_effective.solid_fill_color))
# خروجی نمونه:
#
# ff8064a2 (رنگ [A=255, R=128, G=100, B=162])
برای نشان دادن بیشتر تغییر رنگ، عنصر دیگری میسازیم، رنگ لهیزه را از مرحله ابتدایی به آن اختصاص میدهیم و سپس رنگ تم را بهروز میکنیم.
other_shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 120, 100, 100)
other_shape.fill_format.fill_type = slides.FillType.SOLID
other_shape.fill_format.solid_fill_color.scheme_color = slides.SchemeColor.ACCENT4
presentation.master_theme.color_scheme.accent4.color = draw.Color.red
رنگ جدید بهطور خودکار بر هر دو عنصر اعمال میشود.
تنظیم رنگ تم از پالت اضافی
هنگامی که تبدیلات لومینانس را بر رنگ اصلی تم (1) اعمال میکنید، رنگهای پالت اضافی (2) تولید میشوند. سپس میتوانید آن رنگهای تم را تنظیم و بازیابی کنید.

1 — رنگهای اصلی تم
2 — رنگهای پالت اضافی
این کد Python نشان میدهد چگونه رنگهای پالت اضافی از رنگ اصلی تم استخراج شده و سپس در اشکال استفاده میشوند:
import aspose.slides as slides
with slides.Presentation() as presentation:
slide = presentation.slides[0]
# آکسنت 4
shape1 = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 10, 50, 50)
shape1.fill_format.fill_type = slides.FillType.SOLID
shape1.fill_format.solid_fill_color.scheme_color = slides.SchemeColor.ACCENT4
# آکسنت 4، روشنتر 80%
shape2 = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 70, 50, 50)
shape2.fill_format.fill_type = slides.FillType.SOLID
shape2.fill_format.solid_fill_color.scheme_color = slides.SchemeColor.ACCENT4
shape2.fill_format.solid_fill_color.color_transform.add(slides.ColorTransformOperation.MULTIPLY_LUMINANCE, 0.2)
shape2.fill_format.solid_fill_color.color_transform.add(slides.ColorTransformOperation.ADD_LUMINANCE, 0.8)
# آکسنت 4، روشنتر 60%
shape3 = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 130, 50, 50)
shape3.fill_format.fill_type = slides.FillType.SOLID
shape3.fill_format.solid_fill_color.scheme_color = slides.SchemeColor.ACCENT4
shape3.fill_format.solid_fill_color.color_transform.add(slides.ColorTransformOperation.MULTIPLY_LUMINANCE, 0.4)
shape3.fill_format.solid_fill_color.color_transform.add(slides.ColorTransformOperation.ADD_LUMINANCE, 0.6)
# آکسنت 4، روشنتر 40%
shape4 = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 190, 50, 50)
shape4.fill_format.fill_type = slides.FillType.SOLID
shape4.fill_format.solid_fill_color.scheme_color = slides.SchemeColor.ACCENT4
shape4.fill_format.solid_fill_color.color_transform.add(slides.ColorTransformOperation.MULTIPLY_LUMINANCE, 0.6)
shape4.fill_format.solid_fill_color.color_transform.add(slides.ColorTransformOperation.ADD_LUMINANCE, 0.4)
# آکسنت 4، تیرهتر 25%
shape5 = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 250, 50, 50)
shape5.fill_format.fill_type = slides.FillType.SOLID
shape5.fill_format.solid_fill_color.scheme_color = slides.SchemeColor.ACCENT4
shape5.fill_format.solid_fill_color.color_transform.add(slides.ColorTransformOperation.MULTIPLY_LUMINANCE, 0.75)
# آکسنت 4، تیرهتر 50%
shape6 = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 310, 50, 50)
shape6.fill_format.fill_type = slides.FillType.SOLID
shape6.fill_format.solid_fill_color.scheme_color = slides.SchemeColor.ACCENT4
shape6.fill_format.solid_fill_color.color_transform.add(slides.ColorTransformOperation.MULTIPLY_LUMINANCE, 0.5)
presentation.save("example.pptx", slides.export.SaveFormat.PPTX)
نقشهبرداری SchemeColor به رنگهای ColorScheme
هنگامی که با SchemeColor کار میکنید، ممکن است متوجه شوید که مقادیر رنگ تم زیر را شامل میشود:
BACKGROUND1، BACKGROUND2، TEXT1 و TEXT2.
با این حال، Presentation.master_theme.color_scheme یک ColorScheme برمیگرداند که رنگهای مربوطه را به شکل زیر افشا میکند:
dark1، dark2، light1 و light2.
این تفاوت فقط در نامگذاری است. این مقادیر به همان اسلاتهای رنگ تم اشاره دارند و نگاشت ثابت است:
TEXT1=dark1BACKGROUND1=light1TEXT2=dark2BACKGROUND2=light2
هیچ تبدیل پویا بین TEXT/BACKGROUND و dark/light وجود ندارد. آنها صرفاً نامهای جایگزین برای یکسان بودن رنگهای تم هستند.
این تفاوت نامگذاری از اصطلاحات Microsoft Office ناشی میشود. نسخههای قدیمی Office از Dark 1، Light 1، Dark 2 و Light 2 استفاده میکردند، در حالی که نسخههای جدید UI همان اسلاتها را بهصورت Text 1، Background 1، Text 2 و Background 2 نمایش میدهند.
تغییر فونت تم
برای اینکه بتوانید فونتها را برای تمها و مقاصد دیگر انتخاب کنید، Aspose.Slides از این شناسههای خاص (مشابه موارد PowerPoint) استفاده میکند:
- +mn-lt — فونت بدنه لاتین (Minor Latin Font)
- +mj-lt — فونت سرعنوان لاتین (Major Latin Font)
- +mn-ea — فونت بدنه آسیای شرقی (Minor East Asian Font)
- +mj-ea — فونت سرعنوان آسیای شرقی (Major East Asian Font)
این کد Python نشان میدهد چگونه فونت لاتین را به یک عنصر تم اختصاص دهیم:
portion = slides.Portion("Theme text format")
portion.portion_format.latin_font = slides.FontData("+mn-lt")
paragraph = slides.Paragraph()
paragraph.portions.add(portion)
shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 10, 100, 100)
shape.text_frame.paragraphs.add(paragraph)
این مثال Python نشان میدهد چگونه فونت تم پرزنتیشن را تغییر دهیم:
presentation.master_theme.font_scheme.minor.latin_font = slides.FontData("Arial")
تمام جعبههای متن به فونت جدید بهروز میشوند.
TIP
برای اطلاعات بیشتر، به فونتهای اصلی PowerPoint با Python مراجعه کنید.تغییر استایل پسزمینه تم
بهصورت پیشفرض، PowerPoint ۱۲ پسزمینه از پیش تعریفشده را ارائه میدهد، اما یک ارائه معمولی فقط ۳ مورد از آنها را ذخیره میکند.

بهعنوان مثال، پس از ذخیره یک ارائه در PowerPoint، میتوانید کد Python زیر را اجرا کنید تا تعداد پسزمینههای از پیش تعریفشده موجود را تعیین کنید:
with slides.Presentation() as presentation:
number_of_background_fills = len(presentation.master_theme.format_scheme.background_fill_styles)
print(f"Number of theme background fill styles: {number_of_background_fills}")
background_fill_styles از کلاس FormatScheme میتوانید استایلهای پسزمینه را در یک تم PowerPoint اضافه یا دسترسی پیدا کنید.
این مثال Python نشان میدهد چگونه پسزمینه ارائه را تنظیم کنیم:
presentation.masters[0].background.style_index = 2 # 0 نشان میدهد پر نیست؛ اندیسگذاری از 1 شروع میشود.
TIP
برای اطلاعات بیشتر، به مدیریت پسزمینههای ارائه با Python مراجعه کنید.تغییر افکتهای تم
یک تم PowerPoint معمولاً شامل سه مقدار در هر آرایه استایل است. این آرایهها به سه سطح افکت ترکیب میشوند: ظریف، متوسط و شدید. برای مثال، نتیجه اعمال این افکتها بر یک شکل خاص به این شکل است:

با استفاده از سه ویژگی FillStyles، LineStyles و EffectStyles از کلاس FormatScheme میتوانید عناصر تم را (حتی بیشتر از PowerPoint) بهصورت انعطافپذیر تغییر دهید.
این کد Python نشان میدهد چگونه یک افکت تم را با تغییر بخشهایی از آن عناصر تغییر دهیم:
with slides.Presentation("sample.pptx") as presentation:
presentation.master_theme.format_scheme.line_styles[0].fill_format.solid_fill_color.color = draw.Color.red
presentation.master_theme.format_scheme.fill_styles[2].fill_type = slides.FillType.SOLID
presentation.master_theme.format_scheme.fill_styles[2].solid_fill_color.color = draw.Color.forest_green
presentation.master_theme.format_scheme.effect_styles[2].effect_format.outer_shadow_effect.distance = 10
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
تغییرات حاصل شامل بهروزرسانی رنگ پر، نوع پر، افکت سایه و سایر ویژگیها است:

سوالات متداول
آیا میتوانم یک تم را فقط برای یک اسلاید اعمال کنم بدون اینکه مستر را تغییر دهم؟
بله. Aspose.Slides از تغییر تم در سطح اسلاید پشتیبانی میکند، بنابراین میتوانید تم محلی را فقط بر آن اسلاید اعمال کنید در حالی که تم مستر دستنخورده میماند (از طریق SlideThemeManager).
ایمنترین روش برای انتقال یک تم از یک ارائه به دیگری چیست؟
کلون اسلایدها همراه با مسترشان را به ارائه هدف منتقل کنید. این کار مستر، طرحبندیها و تم مربوطه را حفظ میکند تا ظاهر یکسان بماند.
چگونه میتوانم مقادیر «موثر» را پس از تمام ارثبری و بازنویسیها ببینم؟
از نمای «effective» API در مسیر /shape-effective-properties/ برای تم/رنگ/فونت/افکت استفاده کنید. این نمایهها ویژگیهای نهایی حلشده پس از اعمال مستر و هر گونه بازنویسی محلی را برمیگردانند.