Gerenciar Slides Masters de Apresentação em Python

Visão geral

Um slide master define configurações de design compartilhadas para um grupo de slides. Ele pode conter formas comuns, logotipos, fundos, estilos de texto, configurações de tema e de rodapé. No PowerPoint, editar um slide master é a maneira usual de manter uma apresentação consistente sem repetir a mesma formatação em cada slide.

Aspose.Slides for Python via .NET suporta o mesmo modelo. Uma apresentação pode conter um ou mais master slides, e cada master slide pode conter vários layout slides. Slides normais geralmente não se referem a um master slide diretamente. Em vez disso, um slide normal usa um layout slide, e esse layout slide pertence a um master slide.

A hierarquia é:

  1. Slide master – define o design e tema compartilhados.
  2. Layout slide – define um arranjo específico de placeholders e formatação de nível de layout.
  3. Normal slide – contém o conteúdo real da apresentação e usa um layout slide.

A hierarquia de master slides, layout slides e normal slides

No Aspose.Slides, um slide master é representado pela classe MasterSlide. Todos os master slides em uma apresentação estão disponíveis através da coleção Presentation.masters.

Acessar Slide Masters

No PowerPoint, você pode abrir a visualização de Slide Master em Exibir > Slide Master.

O comando Slide Master na guia Exibir do PowerPoint

No Aspose.Slides, use a coleção masters para acessar master slides:

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

Você também pode obter o master slide usado por um slide normal através do seu 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)

O que um Slide Master contém

Um master slide é um objeto semelhante a um slide. Ele herda o comportamento comum de slide da classe BaseSlide, de modo que expõe muitas das mesmas propriedades de slide usadas por slides normais e de layout. Membros específicos de master são listados na página da API MasterSlide.

Membros de master slide comumente usados incluem:

Membro Propósito
background Define o fundo do slide em nível de master.
shapes Armazena as formas colocadas no master, como logotipos, molduras de imagem e texto compartilhado.
layout_slides Armazena os layout slides que pertencem ao master.
theme_manager Fornece acesso às APIs de tema do master.
header_footer_manager Controla cabeçalhos, rodapés, datas e números de slide para o master e seus layouts filhos.
get_depending_slides Retorna os slides normais que dependem do master através de seus layouts.

Adicionar uma Imagem a um Slide Master

Ao adicionar uma imagem a um master slide, ela aparece nos slides que usam layouts desse master. Isso é útil para logotipos, marcas d’água, faixas decorativas e outros elementos visuais repetidos.

O exemplo a seguir adiciona um logotipo ao primeiro master slide:

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)

Para mais informações sobre molduras de imagem, veja Moldura de Imagem.

Trabalhar com Placeholders

Placeholders são normalmente definidos em layout slides. O slide master fornece o estilo e tema compartilhados que esses layouts herdam, enquanto cada layout decide quais placeholders estão disponíveis e onde eles são posicionados.

No PowerPoint, os comandos de placeholder estão disponíveis na visualização de Slide Master.

O comando Inserir Placeholder na visualização de Slide Master do PowerPoint

Para adicionar novos placeholders com Aspose.Slides, trabalhe com o layout slide que pertence ao master:

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)

Você também pode formatar formas de placeholder que já existam em um master slide. O exemplo a seguir localiza o placeholder de título e aplica um preenchimento de gradiente linear:

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)

Placeholder de título formatado herdado por slides normais

Para mais opções de placeholder e formatação de texto, veja Definir Texto de Prompt em Placeholder e Formatação de Texto.

Alterar o Fundo de um Slide Master

Um fundo de master é herdado por layouts e slides que não o sobrescrevem. O exemplo a seguir define uma cor de fundo sólida para o primeiro master slide:

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)

Para tópicos relacionados, veja Fundo da Apresentação e Tema da Apresentação.

Clonar um Slide Master para Outra Apresentação

Use o método add_clone na classe MasterSlideCollection para copiar um master slide para outra apresentação. O master copiado pode então ser usado por layouts e slides na apresentação de destino.

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)

Se precisar clonar slides normais juntamente com seu master, veja Clonar Slides.

Adicionar Vários Slide Masters

Uma apresentação pode conter vários master slides. Isso é útil quando diferentes seções exigem diferentes identidades visuais, estrutura de página ou configurações de tema.

Comandos do PowerPoint para inserir e gerenciar master slides

O exemplo a seguir clona o master padrão, atribui ao clone um fundo diferente, obtém um layout em branco sob esse master clonado e adiciona um novo slide baseado nesse layout:

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)

Comparar Slide Masters

Slide masters podem ser comparados com o método equals herdado da classe BaseSlide. A comparação verifica estrutura e conteúdo estático, como formas, texto, formatação, animações e outras configurações de slide. Não compara identificadores únicos, como IDs de slide, ou valores dinâmicos de placeholder, como a data atual.

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

Para mais informações, veja Comparar Slides da Apresentação.

Definir a Visualização de Slide Master como a Visualização Padrão

Use a propriedade last_view nas ViewProperties da apresentação para controlar a visualização que o PowerPoint abre primeiro. O exemplo a seguir abre a apresentação na visualização de 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)

Para mais configurações de visualização, veja Salvar Apresentação.

Remover Slide Masters Não Utilizados

Apresentações às vezes contêm master slides que não são mais usados por nenhum slide normal. Remover masters não utilizados pode reduzir o tamanho do arquivo e simplificar a manutenção do modelo.

Use remove_unused para remover masters não utilizados da coleção 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)

Você também pode usar o método de low-code remove_unused_master_slides da classe 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

Qual é a diferença entre um slide master e um layout slide?

Um slide master define configurações de design compartilhadas, como tema, fundo, formas comuns e estilos de texto. Um layout slide pertence a um slide master e define um arranjo específico de placeholders. Um slide normal usa um layout slide, herdando tanto do layout quanto do master.

Uma apresentação pode conter vários slide masters?

Sim. Uma apresentação pode conter vários slide masters. Use múltiplos masters quando diferentes seções precisam de sistemas visuais ou identidades de marca distintas.

Devo adicionar placeholders a um slide master ou a um layout slide?

Na maioria dos casos, adicione placeholders a layout slides. Coloque elementos visuais compartilhados e formatação comum no slide master e, em seguida, coloque os placeholders de conteúdo nos layouts que os slides normais usarão.

Posso excluir um slide master que ainda está sendo usado?

Não. Um slide master que tem slides dependentes não pode ser removido com segurança diretamente. Primeiro mova esses slides para layouts sob outro master, ou use um método de limpeza de masters não usados que remove apenas masters que não estão em uso.