Gestisci i temi delle presentazioni PowerPoint in Python
Introduzione
Un tema di presentazione definisce le proprietà dei suoi elementi di design. Quando scegli un tema, stai scegliendo un insieme coordinato di elementi visuali e le loro proprietà.
In PowerPoint, un tema include colori, fonts, background styles, ed effetti.

Modifica del colore del tema
Un tema PowerPoint utilizza un insieme specifico di colori per i diversi elementi di una diapositiva. Se i valori predefiniti non ti piacciono, puoi modificarli applicando nuovi colori del tema. Per permetterti di selezionare un nuovo colore del tema, Aspose.Slides fornisce valori nell’enumerazione SchemeColor.
Questo codice Python mostra come modificare il colore di accento di un tema:
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
Puoi determinare il valore effettivo del colore risultante come segue:
fill_effective = shape.fill_format.get_effective()
print("{0} ({1})".format(fill_effective.solid_fill_color.name, fill_effective.solid_fill_color))
# L'output di esempio:
#
# ff8064a2 (Colore [A=255, R=128, G=100, B=162])
Per dimostrare ulteriormente la modifica del colore, creiamo un altro elemento, gli assegniamo il colore di accento dal passaggio iniziale e poi aggiorniamo il colore del tema.
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
Il nuovo colore viene applicato automaticamente a entrambi gli elementi.
Imposta un colore del tema dalla tavolozza aggiuntiva
Quando applichi trasformazioni di luminanza al colore principale del tema (1), vengono generati colori dalla tavolozza aggiuntiva (2). Puoi quindi impostare e recuperare quei colori del tema.

1 — Colori principali del tema
2 — Colori dalla tavolozza aggiuntiva
Questo codice Python dimostra come i colori della tavolozza aggiuntiva siano derivati dal colore principale del tema e poi utilizzati nelle forme:
import aspose.slides as slides
with slides.Presentation() as presentation:
slide = presentation.slides[0]
# Accento 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
# Accento 4, Più chiaro 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)
# Accento 4, Più chiaro 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)
# Accento 4, Più chiaro 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)
# Accento 4, Più scuro 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)
# Accento 4, Più scuro 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)
Mappa SchemeColor ai colori ColorScheme
Quando lavori con SchemeColor, potresti notare che contiene i seguenti valori di colore del tema:
BACKGROUND1, BACKGROUND2, TEXT1 e TEXT2.
Tuttavia, Presentation.master_theme.color_scheme restituisce ColorScheme, che espone i colori corrispondenti come:
dark1, dark2, light1 e light2.
Questa differenza è solo nella denominazione. Questi valori si riferiscono agli stessi slot di colore del tema e la mappatura è fissa:
TEXT1=dark1BACKGROUND1=light1TEXT2=dark2BACKGROUND2=light2
Non esiste una conversione dinamica tra TEXT/BACKGROUND e dark/light. Sono semplicemente nomi alternativi per gli stessi colori del tema.
Questa differenza di denominazione proviene dalla terminologia di Microsoft Office. Le versioni più vecchie di Office usavano Dark 1, Light 1, Dark 2 e Light 2, mentre le versioni UI più recenti mostrano gli stessi slot come Text 1, Background 1, Text 2 e Background 2.
Modifica del font del tema
Per consentirti di selezionare i font per i temi e altri scopi, Aspose.Slides utilizza questi identificatori speciali (simili a quelli di PowerPoint):
- +mn-lt — Font corpo Latin (Minor Latin Font)
- +mj-lt — Font intestazione Latin (Major Latin Font)
- +mn-ea — Font corpo East Asian (Minor East Asian Font)
- +mj-ea — Font intestazione East Asian (Major East Asian Font)
Questo codice Python mostra come assegnare il font Latin a un elemento del tema:
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)
Questo esempio Python mostra come modificare il font del tema della presentazione:
presentation.master_theme.font_scheme.minor.latin_font = slides.FontData("Arial")
Tutte le caselle di testo verranno aggiornate con il nuovo font.
TIP
Per ulteriori informazioni, consulta Master PowerPoint Fonts with Python.Modifica dello stile di sfondo del tema
Per impostazione predefinita, PowerPoint fornisce 12 sfondi predefiniti, ma una presentazione tipica ne memorizza solo 3.

Ad esempio, dopo aver salvato una presentazione in PowerPoint, puoi eseguire il seguente codice Python per determinare quanti sfondi predefiniti contiene:
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 della classe FormatScheme, puoi aggiungere o accedere agli stili di sfondo in un tema PowerPoint.
Questo esempio Python mostra come impostare lo sfondo della presentazione:
presentation.masters[0].background.style_index = 2 # 0 indica nessun riempimento; l'indicizzazione inizia da 1.
TIP
Per ulteriori informazioni, consulta Manage Presentation Backgrounds in Python.Modifica degli effetti del tema
Un tema PowerPoint tipicamente include tre valori in ciascun array di stile. Questi array si combinano in tre livelli di effetto: sottile, moderato e intenso. Ad esempio, questo è il risultato quando quegli effetti vengono applicati a una forma specifica:

Utilizzando le tre proprietà — FillStyles, LineStyles e EffectStyles — della classe FormatScheme, puoi modificare gli elementi del tema (in modo ancora più flessibile rispetto a PowerPoint).
Questo codice Python mostra come modificare un effetto del tema alterando parti di quegli elementi:
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)
Le modifiche risultanti includono aggiornamenti al colore di riempimento, tipo di riempimento, effetto ombra e altre proprietà:

FAQ
Posso applicare un tema a una singola diapositiva senza modificare il master?
Sì. Aspose.Slides supporta le sovrascritture di tema a livello di diapositiva, così puoi applicare un tema locale soltanto a quella diapositiva mantenendo intatto il tema master (tramite lo SlideThemeManager).
Qual è il metodo più sicuro per trasferire un tema da una presentazione all’altra?
Clona le diapositive insieme al loro master nella presentazione di destinazione. Questo preserva il master originale, i layout e il tema associato, così l’aspetto rimane coerente.
Come posso vedere i valori “effettivi” dopo tutte le eredità e le sovrascritture?
Utilizza le viste “effective” dell’API per tema/colore/font/effetto. Queste restituiscono le proprietà risolte e finali dopo l’applicazione del master più eventuali sovrascritture locali.