Zarządzanie masterami slajdów prezentacji w Pythonie

Przegląd

Slide master definiuje wspólne ustawienia projektowe dla grupy slajdów. Może zawierać wspólne kształty, loga, tła, style tekstu, ustawienia motywu oraz ustawienia 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 .NET obsługuje ten sam model. Prezentacja może zawierać jedną 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 używają layout‑slajdu, który należy do master‑slajdu.

Hierarchia wygląda następująco:

  1. Slide master – definiuje wspólny projekt i motyw.
  2. Layout slide – definiuje konkretne rozmieszczenie placeholderów i formatowanie na poziomie layoutu.
  3. Normal slide – zawiera rzeczywistą treść prezentacji i używa jednego layout‑slajdu.

Hierarchia master‑slajdów, layout‑slajdów i normalnych slajdów

W Aspose.Slides master‑slajd jest reprezentowany przez klasę MasterSlide. Wszystkie master‑slajdy w prezentacji są dostępne poprzez kolekcję Presentation.masters.

Dostęp do Slide Masterów

W programie PowerPoint można otworzyć widok Slide Master z View > Slide Master.

Polecenie Slide Master na karcie View w PowerPoint

W Aspose.Slides użyj kolekcji masters, aby uzyskać dostęp do master‑slajdów:

import aspose.slides as slides

with slides.Presentation("presentation.pptx") as presentation:
    first_master_slide = presentation.masters[0]
    master_slide_count = len(presentation.masters)
    first_master_layout_slide_count = len(first_master_slide.layout_slides)

    print("Master slides: " + str(master_slide_count))
    print("Layouts in the first master: " + str(first_master_layout_slide_count))

Możesz także pobrać master‑slajd używany przez normalny slajd poprzez jego layout:

import aspose.slides as slides

with slides.Presentation("presentation.pptx") as presentation:
    slide = presentation.slides[0]
    layout_slide = slide.layout_slide
    master_slide = layout_slide.master_slide
    master_slide_name = master_slide.name

    print(master_slide_name)

Co zawiera Slide Master

Master‑slajd jest obiektem podobnym do slajdu. Dziedziczy wspólne zachowanie slajdu z klasy BaseSlide, więc udostępnia wiele tych samych właściwości używanych przez normalne i layout‑slajdy. Członkowie specyficzni dla mastera są wymienieni na stronie API MasterSlide.

Typowo używane członki master‑slajdu to:

Członek Cel
background Ustawia tło na poziomie master‑slajdu.
shapes Przechowuje kształty umieszczone na masterze, takie jak loga, ramki obrazów i wspólny tekst.
layout_slides Przechowuje layout‑slajdy należące do mastera.
theme_manager Udostępnia dostęp do API motywu mastera.
header_footer_manager Kontroluje nagłówki, stopki, daty i numery slajdów dla mastera i jego layoutów potomnych.
get_depending_slides Zwraca normalne slajdy zależne od mastera poprzez ich layouty.

Dodanie obrazu do Slide Mastera

Gdy dodasz obraz do master‑slajdu, pojawi się on na slajdach korzystających z layoutów z tego mastera. Jest to przydatne dla logo, znaków wodnych, dekoracyjnych pasów i innych powtarzalnych elementów graficznych.

Poniższy przykład dodaje logo do pierwszego master‑slajdu:

import aspose.slides as slides

with slides.Presentation("presentation.pptx") as presentation:
    master_slide = presentation.masters[0]

    with open("logo.png", "rb") as logo_stream:
        logo_bytes = logo_stream.read()

    logo_image = presentation.images.add_image(logo_bytes)

    master_slide.shapes.add_picture_frame(
        slides.ShapeType.RECTANGLE,
        20,
        20,
        80,
        80,
        logo_image)

    presentation.save("presentation-with-logo.pptx", slides.export.SaveFormat.PPTX)

Więcej informacji o ramkach obrazu znajdziesz w sekcji Picture Frame.

Kontrola widoczności grafiki mastera

Użyj BaseSlide.show_master_shapes, aby ukryć odziedziczoną grafikę mastera, taką jak loga lub dekoracyjne kształty, bez ich usuwania z mastera. Ustaw Slide.show_master_shapes na False na slajdzie, który ma pominąć tę grafikę, i pozostaw True na slajdach, które mają ją wyświetlać.

Poniższy, samodzielny przykład tworzy niebieski dekoracyjny pas na masterze oraz dwa slajdy używające tego samego pustego layoutu. Pas jest widoczny na pierwszym slajdzie i ukryty na drugim. Nie wymaga żadnej wejściowej prezentacji ani obrazu.

import aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation() as presentation:
    master_slide = presentation.masters[0]
    layout_slide = master_slide.layout_slides.get_by_type(slides.SlideLayoutType.BLANK)
    layout_slide.show_master_shapes = True

    slide_height = presentation.slide_size.size.height
    band = master_slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 0, 0, 60, slide_height)
    band.fill_format.fill_type = slides.FillType.SOLID
    band.fill_format.solid_fill_color.color = draw.Color.steel_blue
    band.line_format.fill_format.fill_type = slides.FillType.NO_FILL

    visible_slide = presentation.slides[0]
    visible_slide.layout_slide = layout_slide
    visible_slide.shapes.clear()

    hidden_slide = presentation.slides.add_empty_slide(layout_slide)

    visible_slide.show_master_shapes = True
    hidden_slide.show_master_shapes = False

    presentation.save("master-graphics.pptx", slides.export.SaveFormat.PPTX)

Przykład używa layoutu Blank dostarczonego z nową prezentacją i usuwa początkowe placeholdery własne pierwszego slajdu.

Wybór zakresu ustawienia

Normalny slajd korzysta ze swojego mastera poprzez Slide.layout_slide oraz LayoutSlide.master_slide. Ustawienie właściwości na pojedynczym slajdzie wpływa tylko na ten slajd. Ustawienie LayoutSlide.show_master_shapes na False ukrywa grafikę mastera dla wszystkich slajdów używających tego wspólnego layoutu, nawet jeśli ich własne ustawienie jest True. Aby ukryć grafikę tylko na jednym slajdzie, zmień właściwość tego slajdu i pozostaw niezmieniony współdzielony layout.

Ustawienie to nie jest obsługiwane jako kontrola widoczności bezpośrednio na master‑slajdzie. Na masterze zawsze zwraca False, a przypisanie True generuje wyjątek. Zastosuj je do normalnego slajdu lub layoutu.

Rozróżnianie grafiki od tła

Operacja Efekt
Ukryj grafikę mastera Kontroluje widoczność odziedziczonych kształtów mastera bez ich usuwania lub zmiany własnych kształtów slajdu.
Zmień wypełnienie tła slajdu Zmienia kolor, gradient lub obraz tła. Grafika mastera jest oddzielnym kształtem i może pozostać widoczna nad tym tłem. Zobacz Presentation Background.
Usuń kształt z mastera Usuwa współdzielony źródłowy kształt, więc nie jest już dostępny dla żadnego slajdu korzystającego z tego mastera.

Praca z placeholderami

Placeholdery są zazwyczaj definiowane na layout‑slajdach. Master‑slajd zapewnia współdzielony styl i motyw, które te layouty dziedziczą, natomiast 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.

Polecenie Insert Placeholder w widoku Slide Master w PowerPoint

Aby dodać nowe placeholdery za pomocą Aspose.Slides, pracuj z layout‑slajdem należącym do mastera:

import aspose.slides as slides

with slides.Presentation("presentation.pptx") as presentation:
    master_slide = presentation.masters[0]
    blank_layout_slide = master_slide.layout_slides.get_by_type(slides.SlideLayoutType.BLANK)

    if blank_layout_slide is None:
        blank_layout_slide = presentation.layout_slides.add(
            master_slide,
            slides.SlideLayoutType.BLANK,
            "Blank")

    blank_layout_slide.placeholder_manager.add_text_placeholder(60, 120, 600, 80)

    presentation.slides.add_empty_slide(blank_layout_slide)
    presentation.save("presentation-with-placeholder.pptx", slides.export.SaveFormat.PPTX)

Możesz także sformatować istniejące już kształty placeholderów na master‑slajdzie. Poniższy przykład znajduje placeholder tytułu i stosuje liniowy gradient:

import aspose.pydrawing as draw
import aspose.slides as slides


def find_placeholder(master_slide, placeholder_type):
    for shape in master_slide.shapes:
        if isinstance(shape, slides.AutoShape) and shape.placeholder is not None:
            if shape.placeholder.type == placeholder_type:
                return shape

    return None


with slides.Presentation("presentation.pptx") as presentation:
    master_slide = presentation.masters[0]
    title_placeholder = find_placeholder(master_slide, slides.PlaceholderType.TITLE)

    if title_placeholder is not None:
        red_gradient_color = draw.Color.from_argb(255, 0, 0)
        purple_gradient_color = draw.Color.from_argb(128, 0, 128)

        title_placeholder.fill_format.fill_type = slides.FillType.GRADIENT
        title_placeholder.fill_format.gradient_format.gradient_shape = slides.GradientShape.LINEAR
        title_placeholder.fill_format.gradient_format.gradient_stops.add(0, red_gradient_color)
        title_placeholder.fill_format.gradient_format.gradient_stops.add(1, purple_gradient_color)

    presentation.save("presentation-title-style.pptx", slides.export.SaveFormat.PPTX)

Sformatowany placeholder tytułu dziedziczony przez normalne slajdy

Więcej opcji dotyczących placeholderów i formatowania tekstu znajdziesz w sekcjach Set Prompt Text in Placeholder oraz Text Formatting.

Zmiana tła Slide Mastera

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 aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation("presentation.pptx") as presentation:
    master_slide = presentation.masters[0]

    master_slide.background.type = slides.BackgroundType.OWN_BACKGROUND
    master_slide.background.fill_format.fill_type = slides.FillType.SOLID
    master_slide.background.fill_format.solid_fill_color.color = draw.Color.forest_green

    presentation.save("presentation-master-background.pptx", slides.export.SaveFormat.PPTX)

Powiązane tematy znajdziesz w sekcjach Presentation Background i Presentation Theme.

Klonoanie Slide Mastera do innej prezentacji

Użyj metody add_clone klasy MasterSlideCollection, aby skopiować master‑slajd do innej prezentacji. Skopiowany master może następnie być używany przez layouty i slajdy w docelowej prezentacji.

import aspose.slides as slides

with slides.Presentation("source.pptx") as source_presentation:
    with slides.Presentation("destination.pptx") as destination_presentation:
        source_master_slide = source_presentation.masters[0]
        cloned_master_slide = destination_presentation.masters.add_clone(source_master_slide)

        destination_presentation.save("destination-with-master.pptx", slides.export.SaveFormat.PPTX)

Jeśli potrzebujesz sklonować normalne slajdy razem z ich masterem, zobacz Clone Slides.

Dodawanie wielu Slide Masterów

Prezentacja może zawierać wiele master‑slajdów. Jest to przydatne, gdy różne sekcje wymagają innego brandingu, struktury strony lub ustawień motywu.

Polecenia PowerPoint do wstawiania i zarządzania master‑slajdami

Poniższy przykład klonuje domyślny master, nadaje klonowi inne tło, pobiera pusty layout pod tym sklonowanym masterem i dodaje nowy slajd oparty na tym layoutcie:

import aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation("presentation.pptx") as presentation:
    default_master_slide = presentation.masters[0]
    section_master_slide = presentation.masters.add_clone(default_master_slide)

    section_master_slide.background.type = slides.BackgroundType.OWN_BACKGROUND
    section_master_slide.background.fill_format.fill_type = slides.FillType.SOLID
    section_master_slide.background.fill_format.solid_fill_color.color = draw.Color.light_steel_blue

    section_blank_layout = section_master_slide.layout_slides.get_by_type(slides.SlideLayoutType.BLANK)

    if section_blank_layout is None:
        section_blank_layout = presentation.layout_slides.add(
            section_master_slide,
            slides.SlideLayoutType.BLANK,
            "Section Blank")

    presentation.slides.add_empty_slide(section_blank_layout)
    presentation.save("presentation-with-multiple-masters.pptx", slides.export.SaveFormat.PPTX)

Porównywanie Slide Masterów

Master‑slajdy można porównać przy użyciu metody equals odziedziczonej z klasy 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 slide ID, ani dynamicznych wartości placeholderów, takich jak bieżąca data.

import aspose.slides as slides

with slides.Presentation("first.pptx") as first_presentation:
    with slides.Presentation("second.pptx") as second_presentation:
        first_presentation_master_count = len(first_presentation.masters)
        second_presentation_master_count = len(second_presentation.masters)

        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.masters[first_master_index]
                second_master_slide = second_presentation.masters[second_master_index]
                are_master_slides_equal = first_master_slide.equals(second_master_slide)

                if are_master_slides_equal:
                    print(
                        "first.pptx master #{} equals second.pptx master #{}".format(
                            first_master_index,
                            second_master_index))

Więcej informacji znajdziesz w sekcji Compare Presentation Slides.

Ustawienie widoku Slide Master jako widoku domyślnego

Użyj właściwości last_view na obiekcie ViewProperties prezentacji, aby kontrolować widok otwierany jako pierwszy w PowerPoint. Poniższy przykład otwiera prezentację w widoku Slide Master:

import aspose.slides as slides

with slides.Presentation("presentation.pptx") as presentation:
    presentation.view_properties.last_view = slides.ViewType.SLIDE_MASTER_VIEW
    presentation.save("presentation-master-view.pptx", slides.export.SaveFormat.PPTX)

Więcej ustawień widoku znajdziesz w sekcji Save Presentation.

Usuwanie nieużywanych master‑slajdów

Czasami prezentacje zawierają master‑slajdy, które nie są już używane przez żadne normalne slajdy. Usunięcie nieużywanych masterów może zmniejszyć rozmiar pliku i uprościć utrzymanie szablonu.

Użyj remove_unused, aby usunąć nieużywane mastery z kolekcji masters:

import aspose.slides as slides

with slides.Presentation("presentation.pptx") as presentation:
    presentation.masters.remove_unused(True)
    presentation.save("presentation-clean.pptx", slides.export.SaveFormat.PPTX)

Możesz także skorzystać z niskokodowej metody remove_unused_master_slides klasy Compress:

import aspose.slides as slides

with slides.Presentation("presentation.pptx") as presentation:
    slides.lowcode.Compress.remove_unused_master_slides(presentation)
    presentation.save("presentation-clean.pptx", slides.export.SaveFormat.PPTX)

FAQ

Jaka jest różnica między slide masterem a layout‑slajdem?

Slide master definiuje wspólne ustawienia projektowe, takie jak motyw, tło, wspólne kształty i style tekstu. Layout‑slajd należy do mastera i definiuje określone rozmieszczenie placeholderów. Normalny slajd używa layout‑slajdu, więc dziedziczy zarówno z layoutu, jak i z mastera.

Czy jedna prezentacja może zawierać kilka slide masterów?

Tak. Prezentacja może zawierać kilka slide masterów. Używaj wielu masterów, gdy różne sekcje wymagają odmiennych systemów wizualnych lub brandingu.

Czy placeholdery powinny być dodawane 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, z których będą korzystać normalne 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 te, które nie są używane.