Zarządzanie masterami slajdów prezentacji w Pythonie via Java
Przegląd
A slide master definiuje wspólne ustawienia projektowe dla grupy slajdów. Może zawierać wspólne kształty, logotypy, tła, style tekstu, ustawienia motywu i stopki. W programie PowerPoint edycja slide mastera jest typowym sposobem utrzymania spójności prezentacji bez powtarzania tego samego formatowania na każdym slajdzie.
Aspose.Slides for Python via Java obsługuje ten sam model. Prezentacja może zawierać jeden lub więcej master slajdów, a każdy master slajd może zawierać kilka layout slajdów. Zwykłe slajdy zazwyczaj nie odwołują się bezpośrednio do master slajdu. Zamiast tego zwykły slajd używa layout slajdu, a ten layout slajd należy do master slajdu.
Hierarchia jest:
- Slide master – definiuje współdzielony projekt i motyw.
- Layout slide – definiuje określone rozmieszczenie placeholderów i formatowanie na poziomie układu.
- Normal slide – zawiera rzeczywistą treść prezentacji i używa jednego layout slajdu.

W Aspose.Slides master slajd jest reprezentowany przez klasę MasterSlide. Wszystkie master slajdy w prezentacji są dostępne poprzez kolekcję Presentation.getMasters, która jest reprezentowana przez MasterSlideCollection.
Inheritance
When the same property is defined at more than one level, the more specific level wins. For example, if a master slide and a layout slide both define a background, slides based on that layout use the layout background. For more information about layout slides, see Apply or Change Slide Layouts.Dostęp do master slajdów
W programie PowerPoint można otworzyć widok Slide Master z View > Slide Master.

W Aspose.Slides użyj kolekcji Presentation.getMasters, aby uzyskać dostęp do master slajdów:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation
presentation = Presentation("presentation.pptx")
try:
first_master_slide = presentation.getMasters().get_Item(0)
master_slide_count = presentation.getMasters().size()
first_master_layout_slide_count = first_master_slide.getLayoutSlides().size()
print(f"Master slides: {master_slide_count}")
print(f"Layouts in the first master: {first_master_layout_slide_count}")
finally:
presentation.dispose()
Możesz również pobrać master slajd używany przez zwykły slajd poprzez jego layout:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation
presentation = Presentation("presentation.pptx")
try:
slide = presentation.getSlides().get_Item(0)
layout_slide = slide.getLayoutSlide()
master_slide = layout_slide.getMasterSlide()
master_slide_name = master_slide.getName()
print(master_slide_name)
finally:
presentation.dispose()
Co zawiera master slajd
Master slajd jest obiektem podobnym do slajdu. Dziedziczy z BaseSlide, więc udostępnia wiele tych samych właściwości slajdu używanych przez zwykłe i layout slajdy. Specyficzne dla mastera członki są wymienione na stronie API MasterSlide.
Często używane członki master slajdu obejmują:
| Członek | Cel |
|---|---|
| getBackground | Ustawia tło slajdu na poziomie mastera. |
| getShapes | Przechowuje kształty umieszczone na masterze, takie jak logotypy, ramki obrazów i wspólny tekst. |
| getLayoutSlides | Przechowuje layout slajdy, które należą do mastera. |
| getThemeManager | Udostępnia dostęp do API motywu mastera. |
| getHeaderFooterManager | Kontroluje nagłówki, stopki, daty i numery slajdów dla mastera i jego układów podrzędnych. |
| getDependingSlides | Zwraca zwykłe slajdy zależne od mastera poprzez ich layouty. |
Dodaj obraz do master slajdu
Gdy dodasz obraz do master slajdu, pojawi się on na slajdach korzystających z layoutów z tego mastera. Jest to przydatne w przypadku logotypów, znaków wodnych, dekoracyjnych pasów i innych powtarzalnych elementów wizualnych.
Poniższy przykład dodaje logo do pierwszego master slajdu:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Images, Presentation, SaveFormat, ShapeType
presentation = Presentation("presentation.pptx")
try:
master_slide = presentation.getMasters().get_Item(0)
logo = Images.fromFile("logo.png")
try:
logo_image = presentation.getImages().addImage(logo)
master_slide.getShapes().addPictureFrame(ShapeType.Rectangle, 20, 20, 80, 80, logo_image)
finally:
logo.dispose()
presentation.save("presentation-with-logo.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Po więcej informacji o ramkach obrazów zobacz Picture Frame.
Praca z placeholderami
Placeholdery są zazwyczaj definiowane na layout slajdach. Master slajd zapewnia wspólny styl i motyw, które te layouty dziedziczą, podczas gdy każdy layout decyduje, które placeholdery są dostępne i gdzie są umieszczone.
W PowerPoint polecenia placeholderów są dostępne w widoku Slide Master.

Aby dodać nowe placeholdery w Aspose.Slides, pracuj z layout slajdem, który należy do mastera:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, SlideLayoutType
presentation = Presentation("presentation.pptx")
try:
master_slide = presentation.getMasters().get_Item(0)
blank_layout_slide = master_slide.getLayoutSlides().getByType(SlideLayoutType.Blank)
if blank_layout_slide is None:
blank_layout_slide = master_slide.getLayoutSlides().add(SlideLayoutType.Blank, "Blank")
blank_layout_slide.getPlaceholderManager().addTextPlaceholder(60, 120, 600, 80)
presentation.getSlides().addEmptySlide(blank_layout_slide)
presentation.save("presentation-with-placeholder.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Możesz także sformatować istniejące na masterze kształty placeholderów. Poniższy przykład znajduje placeholder tytułu i stosuje wypełnienie gradientem liniowym:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import AutoShape, FillType, GradientShape, PlaceholderType, Presentation, SaveFormat
Color = jpype.JClass("java.awt.Color")
presentation = Presentation("presentation.pptx")
try:
master_slide = presentation.getMasters().get_Item(0)
title_placeholder = None
for shape in master_slide.getShapes():
if isinstance(shape, AutoShape):
if shape.getPlaceholder() is not None and shape.getPlaceholder().getType() == PlaceholderType.Title:
title_placeholder = shape
break
if title_placeholder is not None:
red_gradient_color = Color(255, 0, 0)
purple_gradient_color = Color(128, 0, 128)
title_placeholder.getFillFormat().setFillType(FillType.Gradient)
title_placeholder.getFillFormat().getGradientFormat().setGradientShape(GradientShape.Linear)
title_placeholder.getFillFormat().getGradientFormat().getGradientStops().add(jpype.JFloat(0.0), red_gradient_color)
title_placeholder.getFillFormat().getGradientFormat().getGradientStops().add(jpype.JFloat(1.0), purple_gradient_color)
presentation.save("presentation-title-style.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()

Po więcej opcji formatowania placeholderów i tekstu zobacz Set Prompt Text in Placeholder oraz Text Formatting.
Zmień tło master slajdu
Tło mastera jest dziedziczone przez layouty i slajdy, które go nie nadpisują. Poniższy przykład ustawia jednolity kolor tła dla pierwszego master slajdu:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import BackgroundType, FillType, Presentation, SaveFormat
Color = jpype.JClass("java.awt.Color")
presentation = Presentation("presentation.pptx")
try:
master_slide = presentation.getMasters().get_Item(0)
master_background_color = Color.GREEN
master_slide.getBackground().setType(BackgroundType.OwnBackground)
master_slide.getBackground().getFillFormat().setFillType(FillType.Solid)
master_slide.getBackground().getFillFormat().getSolidFillColor().setColor(master_background_color)
presentation.save("presentation-master-background.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Powiązane tematy: Presentation Background oraz Presentation Theme.
Sklonuj master slajd do innej prezentacji
Użyj MasterSlideCollection.addClone, aby skopiować master slajd do innej prezentacji. Skopiowany master może następnie być używany przez layouty i slajdy w docelowej prezentacji.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat
source_presentation = Presentation("source.pptx")
destination_presentation = Presentation("destination.pptx")
try:
source_master_slide = source_presentation.getMasters().get_Item(0)
cloned_master_slide = destination_presentation.getMasters().addClone(source_master_slide)
destination_presentation.save("destination-with-master.pptx", SaveFormat.Pptx)
finally:
source_presentation.dispose()
destination_presentation.dispose()
Jeśli potrzebujesz sklonować zwykłe slajdy razem z ich masterem, zobacz Clone Slides.
Dodaj wiele master slajdów
Prezentacja może zawierać wiele master slajdów. Jest to przydatne, gdy różne sekcje wymagają odmiennych brandingów, struktury stron lub ustawień motywu.

Poniższy przykład klonuje domyślny master, nadaje klonowi inne tło, tworzy layout pod tym sklonowanym masterem i dodaje nowy slajd oparty na tym layoucie:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import BackgroundType, FillType, Presentation, SaveFormat, SlideLayoutType
Color = jpype.JClass("java.awt.Color")
presentation = Presentation("presentation.pptx")
try:
default_master_slide = presentation.getMasters().get_Item(0)
section_master_slide = presentation.getMasters().addClone(default_master_slide)
section_master_background_color = Color.LIGHT_GRAY
section_master_slide.getBackground().setType(BackgroundType.OwnBackground)
section_master_slide.getBackground().getFillFormat().setFillType(FillType.Solid)
section_master_slide.getBackground().getFillFormat().getSolidFillColor().setColor(section_master_background_color)
source_blank_layout = default_master_slide.getLayoutSlides().getByType(SlideLayoutType.Blank)
if source_blank_layout is None:
source_blank_layout = default_master_slide.getLayoutSlides().get_Item(0)
section_blank_layout = section_master_slide.getLayoutSlides().addClone(source_blank_layout)
presentation.getSlides().addEmptySlide(section_blank_layout)
presentation.save("presentation-with-multiple-masters.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Porównaj master slajdy
Master slajdy można porównać metodą equals odziedziczoną po BaseSlide. Porównanie sprawdza strukturę i statyczną zawartość, taką jak kształty, tekst, formatowanie, animacje i inne ustawienia slajdu. Nie porównuje unikalnych identyfikatorów, takich jak ID slajdu, ani dynamicznych wartości placeholderów, takich jak bieżąca data.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation
first_presentation = Presentation("first.pptx")
second_presentation = Presentation("second.pptx")
try:
first_presentation_master_count = first_presentation.getMasters().size()
second_presentation_master_count = second_presentation.getMasters().size()
for first_master_index in range(first_presentation_master_count):
for second_master_index in range(second_presentation_master_count):
first_master_slide = first_presentation.getMasters().get_Item(first_master_index)
second_master_slide = second_presentation.getMasters().get_Item(second_master_index)
are_master_slides_equal = first_master_slide.equals(second_master_slide)
if are_master_slides_equal:
print(f"first.pptx master #{first_master_index} equals second.pptx master #{second_master_index}")
finally:
first_presentation.dispose()
second_presentation.dispose()
Po więcej informacji zobacz Compare Presentation Slides.
Ustaw widok master slajdu jako domyślny widok
Użyj metody setLastView na ViewProperties, aby kontrolować widok, który PowerPoint otwiera jako pierwszy. Poniższy przykład otwiera prezentację w widoku Slide Master:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, ViewType
presentation = Presentation("presentation.pptx")
try:
presentation.getViewProperties().setLastView(ViewType.SlideMasterView)
presentation.save("presentation-master-view.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Po więcej ustawień widoku zobacz Save Presentation.
Usuń nieużywane master slajdy
Prezentacje czasami zawierają master slajdy, które nie są już używane przez żadne zwykłe slajdy. Usunięcie nieużywanych masterów może zmniejszyć rozmiar pliku i uprościć utrzymanie szablonu.
Użyj removeUnused, aby usunąć nieużywane master slajdy z kolekcji Presentation.getMasters:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat
presentation = Presentation("presentation.pptx")
try:
presentation.getMasters().removeUnused(True)
presentation.save("presentation-clean.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Możesz także użyć niskokodowej metody Compress.removeUnusedMasterSlides:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Compress, Presentation, SaveFormat
presentation = Presentation("presentation.pptx")
try:
Compress.removeUnusedMasterSlides(presentation)
presentation.save("presentation-clean.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
FAQ
Jaka jest różnica między master slajdem a layout slajdem?
Master slajd definiuje współdzielone ustawienia projektowe, takie jak motyw, tło, wspólne kształty i style tekstu. Layout slajd należy do master slajdu i definiuje konkretne rozmieszczenie placeholderów. Zwykły slajd używa layout slajdu, więc dziedziczy zarówno z layoutu, jak i z mastera.
Czy jedna prezentacja może zawierać kilka master slajdów?
Tak. Prezentacja może zawierać kilka master slajdów. Używaj wielu masterów, gdy różne sekcje wymagają odmiennych systemów wizualnych lub brandingu.
Czy powinienem dodawać placeholdery do master slajdu czy do layout slajdu?
W większości przypadków dodawaj placeholdery do layout slajdów. Umieść wspólne elementy wizualne i wspólne formatowanie na master slajdzie, a placeholdery treści na layoutach, które będą używane przez zwykłe slajdy.
Czy mogę usunąć master slajd, który jest nadal używany?
Nie. Master slajd, który ma zależne slajdy, nie może być bezpiecznie usunięty bezpośrednio. Najpierw przenieś te slajdy do layoutów pod innym masterem lub użyj metody czyszczenia nieużywanych masterów, która usuwa tylko mastery nie będące w użyciu.