Gerenciar Seções de Slides em Apresentações com Python

Introdução

Seções organizam slides consecutivos em grupos nomeados sem alterar o conteúdo dos slides. Com Aspose.Slides for Python via .NET, você pode criar, reordenar, renomear, inspecionar e remover seções através da propriedade Presentation.sections.

Seções são especialmente úteis quando:

  • uma grande apresentação precisa ser dividida em tópicos ou capítulos lógicos;
  • diferentes grupos de slides são atribuídos a colaboradores diferentes;
  • slides precisam ser processados, movidos ou mesclados como grupos.

Escolha nomes de seção concisos que descrevam o propósito dos slides agrupados. Como as seções fazem parte da estrutura da apresentação, use as APIs de seção para determinar a associação em vez de derivá‑la das posições dos slides.

Criar e Gerenciar Seções

Use SectionCollection.add_section para criar uma seção especificando seu nome e slide inicial. Aspose.Slides determina quais slides pertencem à seção a partir da estrutura de seção atual da apresentação.

A mesma SectionCollection também permite:

O exemplo a seguir cria duas seções, move uma delas, remove-a junto com seus slides e acrescenta uma seção vazia:

import aspose.slides as slides

with slides.Presentation() as presentation:
    title_slide = presentation.slides[0]
    presentation.slides.add_empty_slide(presentation.layout_slides[0])
    results_slide = presentation.slides.add_empty_slide(presentation.layout_slides[0])
    presentation.slides.add_empty_slide(presentation.layout_slides[0])

    presentation.sections.add_section("Introduction", title_slide)
    results_section = presentation.sections.add_section("Results", results_slide)

    presentation.sections.reorder_section_with_slides(results_section, 0)
    presentation.sections.remove_section_with_slides(results_section)
    presentation.sections.append_empty_section("Appendix")

Após essas operações, a apresentação contém a seção Introduction com seus slides e uma seção vazia Appendix. A seção Results e seus slides foram removidos.

Renomear Seções

Para renomear uma seção, defina sua propriedade Section.name. Os slides e a posição da seção permanecem inalterados.

O exemplo a seguir cria uma seção e altera seu nome:

import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]
    section = presentation.sections.add_section("Overview", slide)
    section.name = "Introduction"

Recuperar Slides das Seções

A propriedade Presentation.sections devolve uma SectionCollection que pode ser iterada. Para cada Section, chame Section.get_slides_list_of_section para obter os slides que atualmente pertencem a ela. O método devolve uma SectionSlideCollection, que fornece contagem, acesso indexado e iteração.

O exemplo a seguir cria duas seções preenchidas e uma seção vazia, então imprime o name, identifier, starting slide, contagem de slides e números dos slides de cada seção. Ele usa acesso indexado para ler o primeiro slide e um for para processar todos os slides. Para a seção vazia, a coleção retornada tem contagem zero, o índice não é acessado e a iteração não realiza passos.

import aspose.slides as slides

with slides.Presentation() as presentation:
    first_slide = presentation.slides[0]
    presentation.slides.add_empty_slide(presentation.layout_slides[0])
    third_slide = presentation.slides.add_empty_slide(presentation.layout_slides[0])

    presentation.sections.add_section("Introduction", first_slide)
    presentation.sections.add_section("Details", third_slide)
    presentation.sections.append_empty_section("Appendix")

    for section in presentation.sections:
        section_slides = section.get_slides_list_of_section()
        starting_slide = "none" if section.started_from_slide is None else str(section.started_from_slide.slide_number)

        print(f"Section: {section.name}")
        print(f"ID: {section.section_id}")
        print(f"Starting slide: {starting_slide}")
        print(f"Slide count: {section_slides.count}")

        if section_slides.count > 0:
            print(f"First slide via index: {section_slides[0].slide_number}")

        print("Slide numbers:", end="")
        for slide in section_slides:
            print(f" {slide.slide_number}", end="")
        print()

A associação a uma seção é determinada pela estrutura de seções da apresentação. Não calcule manualmente o intervalo de uma seção a partir de Section.started_from_slide, índices de slides e o slide inicial da próxima seção.

Edições estruturais podem alterar tanto os slides retornados para uma seção quanto seus números de slide. Isso inclui reordenar slides, clonar um slide em uma seção, mover uma seção junto com seus slides, remover slides e remover seções. O próximo exemplo chama Section.get_slides_list_of_section após cada mudança em vez de manter suposições sobre os limites anteriores da seção.

import aspose.slides as slides


def print_section_slides(label, section):
    section_slides = section.get_slides_list_of_section()
    print(f"{label} ({section_slides.count} slides):", end="")
    for slide in section_slides:
        print(f" {slide.slide_number}", end="")
    print()


with slides.Presentation() as presentation:
    first_slide = presentation.slides[0]
    presentation.slides.add_empty_slide(presentation.layout_slides[0])
    third_slide = presentation.slides.add_empty_slide(presentation.layout_slides[0])
    presentation.slides.add_empty_slide(presentation.layout_slides[0])
    first_section = presentation.sections.add_section("First", first_slide)
    second_section = presentation.sections.add_section("Second", third_slide)

    print_section_slides("Initially", first_section)

    slides_before_clone = first_section.get_slides_list_of_section()
    presentation.slides.add_clone(slides_before_clone[0], first_section)
    print_section_slides("After cloning into the section", first_section)

    slides_before_reorder = first_section.get_slides_list_of_section()
    first_section_position = slides_before_reorder[0].slide_number - 1
    presentation.slides.reorder(first_section_position, slides_before_reorder[slides_before_reorder.count - 1])
    print_section_slides("After reordering slides", first_section)

    presentation.sections.reorder_section_with_slides(first_section, 1)
    print_section_slides("After moving the section", first_section)

    slides_before_removal = first_section.get_slides_list_of_section()
    presentation.slides.remove(slides_before_removal[0])
    print_section_slides("After removing a slide", first_section)

    presentation.sections.remove_section_with_slides(second_section)
    for section in presentation.sections:
        print_section_slides("Remaining section", section)

Chame Section.get_slides_list_of_section novamente sempre que slides ou seções forem reordenados, clonados, movidos ou removidos. Isso mantém o processamento subsequente alinhado com a estrutura atual da apresentação.

O formato PPT (PowerPoint 97–2003) não preserva metadados de seção. Use este fluxo de trabalho com um formato que suporte seções, como PPTX; converter para PPT remove a estrutura de seções necessária para iterações posteriores.

FAQ

As seções são preservadas ao salvar no formato PPT (PowerPoint 97–2003)?

Não. O formato PPT não suporta metadados de seção, portanto o agrupamento de seções é perdido ao salvar em .ppt.

Uma seção inteira pode ser “oculta”?

Não. Uma seção não possui estado de visibilidade. Para ocultar seu conteúdo, defina a propriedade Slide.hidden para cada slide da seção.

Como posso encontrar a seção que contém um slide?

Itere sobre Presentation.sections, chame Section.get_slides_list_of_section para cada seção e compare os slides retornados com o slide alvo. Para uma seção não vazia, Section.started_from_slide retorna seu primeiro slide; para uma seção vazia, retorna None.