Správa témat prezentací PowerPoint v Pythonu

Úvod

Téma prezentace definuje vlastnosti jejích návrhových prvků. Když vyberete téma, volíte koordinovanou sadu vizuálních prvků a jejich vlastností.

V PowerPointu téma zahrnuje barvy, písma, styly pozadí, a efekty.

prvky tématu

Změna barvy tématu

Téma PowerPointu používá konkrétní sadu barev pro různé prvky na snímku. Pokud se vám výchozí barvy nelíbí, můžete je změnit aplikací nových barev tématu. Aby vám umožnilo vybrat novou barvu tématu, Aspose.Slides poskytuje hodnoty v enumeraci SchemeColor.

Tento Python kód ukazuje, jak změnit akcentní barvu tématu:

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

Můžete určit efektivní hodnotu výsledné barvy následujícím způsobem:

fill_effective = shape.fill_format.get_effective()
print("{0} ({1})".format(fill_effective.solid_fill_color.name, fill_effective.solid_fill_color))

# Výstup příkladu:
#
# ff8064a2 (Barva [A=255, R=128, G=100, B=162])

Abychom dále demonstrovali změnu barvy, vytvoříme další prvek, přiřadíme mu akcentní barvu z úvodního kroku a poté aktualizujeme barvu tématu.

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

Nová barva je automaticky použita na oba prvky.

Nastavení barvy tématu z doplňkové palety

Když použijete transformace jasu na hlavní barvu tématu (1), jsou generovány barvy z doplňkové palety (2). Poté můžete tyto barvy tématu nastavit a získat.

barvy doplňkové palety

1 — Hlavní barvy tématu
2 — Barvy z doplňkové palety

Tento Python kód demonstruje, jak jsou barvy doplňkové palety odvozeny z hlavní barvy tématu a následně použity ve tvarech:

import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    # Akcent 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

    # Akcent 4, světlejší 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)

    # Akcent 4, světlejší 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)

    # Akcent 4, světlejší 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)

    # Akcent 4, tmavší 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)

    # Akcent 4, tmavší 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)

Mapování SchemeColor na barvy ColorScheme

Když pracujete s SchemeColor, můžete si všimnout, že obsahuje následující hodnoty barev tématu:

BACKGROUND1, BACKGROUND2, TEXT1 a TEXT2.

Nicméně Presentation.master_theme.color_scheme vrací ColorScheme, který zpřístupňuje odpovídající barvy jako:

dark1, dark2, light1 a light2.

Tento rozdíl je pouze v názvosloví. Tyto hodnoty odkazují na stejné sloty barev tématu a mapování je pevné:

  • TEXT1 = dark1
  • BACKGROUND1 = light1
  • TEXT2 = dark2
  • BACKGROUND2 = light2

Neexistuje žádná dynamická konverze mezi TEXT/BACKGROUND a dark/light. Jedná se pouze o alternativní názvy stejných barev tématu.

Tento rozdíl v názvosloví pochází z terminologie Microsoft Office. Starší verze Office používaly Dark 1, Light 1, Dark 2 a Light 2, zatímco novější verze UI zobrazují stejné sloty jako Text 1, Background 1, Text 2 a Background 2.

Změna písma tématu

Aby vám umožnilo vybrat písma pro témata a další účely, Aspose.Slides používá tyto speciální identifikátory (podobné těm v PowerPointu):

  • +mn-lt — Tělo písmo Latin (Minor Latin Font)
  • +mj-lt — Titulní písmo Latin (Major Latin Font)
  • +mn-ea — Tělo písmo East Asian (Minor East Asian Font)
  • +mj-ea — Titulní písmo East Asian (Major East Asian Font)

Tento Python kód ukazuje, jak přiřadit latinské písmo k prvku tématu:

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)

Tento Python příklad ukazuje, jak změnit písmo tématu prezentace:

presentation.master_theme.font_scheme.minor.latin_font = slides.FontData("Arial")

Všechny textové rámečky budou aktualizovány na nové písmo.

Změna stylu pozadí tématu

Ve výchozím nastavení PowerPoint poskytuje 12 předdefinovaných pozadí, ale typická prezentace ukládá jen 3 z nich.

předdefinovaná pozadí

Například po uložení prezentace v PowerPointu můžete spustit následující Python kód, abyste zjistili, kolik předdefinovaných pozadí obsahuje:

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}")

Tento Python příklad ukazuje, jak nastavit pozadí prezentace:

presentation.masters[0].background.style_index = 2  # 0 označuje žádnou výplň; indexování začíná od 1.

Změna efektů tématu

Téma PowerPointu typicky obsahuje tři hodnoty v každém poli stylů. Tato pole se kombinují do tří úrovní efektů: jemný, střední a intenzivní. Například zde je výsledek, když jsou tyto efekty aplikovány na konkrétní tvar:

aplikované efekty

Použitím tří vlastností — FillStyles, LineStyles a EffectStyles — ze třídy FormatScheme můžete upravit prvky tématu (ještě flexibilněji než v PowerPointu).

Tento Python kód ukazuje, jak změnit efekt tématu úpravou částí těchto prvků:

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)

Výsledné změny zahrnují aktualizace barvy výplně, typu výplně, stínového efektu a dalších vlastností:

výsledky změn

Často kladené otázky

Mohu použít téma na jediný snímek, aniž bych změnil master?

Ano. Aspose.Slides podporuje přepsání tématu na úrovni snímku, takže můžete použít lokální téma jen na tento snímek a zároveň zachovat hlavní téma nedotčené (prostřednictvím SlideThemeManager).

Jaký je nejbezpečnější způsob, jak přenést téma z jedné prezentace do druhé?

Klonovat snímky spolu s jejich masterem do cílové prezentace. Toto zachová originální master, rozvržení a související téma, takže vzhled zůstane konzistentní.

Jak mohu zobrazit „efektivní“ hodnoty po veškerém dědění a přepsání?

Použijte „efektivní“ pohledy API (“effective” views) pro téma/barvu/písmo/efekt. Tyto vrací vyřešené konečné vlastnosti po aplikaci masteru a všech lokálních přepisů.