Folienabschnitte in Präsentationen mit Python via Java verwalten

Einführung

Abschnitte organisieren aufeinanderfolgende Folien in benannte Gruppen, ohne den Folieninhalt zu ändern. Mit Aspose.Slides für Python via Java können Sie Abschnitte erstellen, neu anordnen, umbenennen, prüfen und entfernen über die Presentation.getSections Methode.

Abschnitte sind besonders nützlich, wenn:

  • eine große Präsentation in logische Themen oder Kapitel aufgeteilt werden muss;
  • verschiedene Foliengruppen verschiedenen Mitarbeitern zugewiesen werden;
  • Folien als Gruppen verarbeitet, verschoben oder zusammengeführt werden müssen.

Wählen Sie prägnante Abschnittsnamen, die den Zweck der gruppierten Folien beschreiben. Da Abschnitte Teil der Präsentationsstruktur sind, verwenden Sie die Abschnitts‑APIs, um die Zugehörigkeit zu bestimmen, anstatt sie aus den Folienpositionen abzuleiten.

Abschnitte erstellen und verwalten

Verwenden Sie SectionCollection.addSection um einen Abschnitt zu erstellen, indem Sie seinen Namen und die Startfolie angeben. Aspose.Slides ermittelt, welche Folien zum Abschnitt gehören, anhand der aktuellen Abschnittsstruktur der Präsentation.

Die gleiche SectionCollection ermöglicht Ihnen ebenfalls:

Das folgende Beispiel erstellt zwei Abschnitte, verschiebt einen davon, entfernt ihn zusammen mit seinen Folien und fügt einen leeren Abschnitt hinzu:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation

presentation = Presentation()
try:
    title_slide = presentation.getSlides().get_Item(0)
    layout_slide = presentation.getLayoutSlides().get_Item(0)
    presentation.getSlides().addEmptySlide(layout_slide)
    results_slide = presentation.getSlides().addEmptySlide(layout_slide)
    presentation.getSlides().addEmptySlide(layout_slide)

    presentation.getSections().addSection("Introduction", title_slide)
    results_section = presentation.getSections().addSection("Results", results_slide)

    presentation.getSections().reorderSectionWithSlides(results_section, 0)
    presentation.getSections().removeSectionWithSlides(results_section)
    presentation.getSections().appendEmptySection("Appendix")
finally:
    presentation.dispose()

Nach diesen Vorgängen enthält die Präsentation den Abschnitt Introduction mit seinen Folien und einen leeren Abschnitt Appendix. Der Abschnitt Results und seine Folien wurden entfernt.

Abschnitte umbenennen

Um einen Abschnitt umzubenennen, rufen Sie die Methode Section.setName auf. Die Folien des Abschnitts und seine Position bleiben unverändert.

Das folgende Beispiel erstellt einen Abschnitt und ändert dessen Namen:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation

presentation = Presentation()
try:
    slide = presentation.getSlides().get_Item(0)
    section = presentation.getSections().addSection("Overview", slide)
    section.setName("Introduction")
finally:
    presentation.dispose()

Folien aus Abschnitten abrufen

Die Methode Presentation.getSections gibt eine SectionCollection zurück, über die Sie iterieren können. Für jede Section, rufen Sie Section.getSlidesListOfSection auf, um die Folien zu erhalten, die derzeit zu ihr gehören. Die Methode liefert eine SectionSlideCollection, die eine Zählung, indexierten Zugriff und Iteration bereitstellt.

Das folgende Beispiel erstellt zwei gefüllte Abschnitte und einen leeren Abschnitt, gibt dann für jeden Abschnitt den Namen, die Kennung, die Startfolie, die Folienanzahl und die Foliennummern aus. Es verwendet SectionSlideCollection.get_Item um die erste Folie zu lesen und eine for‑Anweisung, um jede Folie zu verarbeiten. Für den leeren Abschnitt hat die zurückgegebene Sammlung die Größe null, die Methode wird nicht aufgerufen und die Iteration führt keine Aktionen aus.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation

presentation = Presentation()
try:
    first_slide = presentation.getSlides().get_Item(0)
    layout_slide = presentation.getLayoutSlides().get_Item(0)
    presentation.getSlides().addEmptySlide(layout_slide)
    third_slide = presentation.getSlides().addEmptySlide(layout_slide)

    presentation.getSections().addSection("Introduction", first_slide)
    presentation.getSections().addSection("Details", third_slide)
    presentation.getSections().appendEmptySection("Appendix")

    for section in presentation.getSections():
        section_slides = section.getSlidesListOfSection()
        starting_slide = "none" if section.getStartedFromSlide() is None else str(section.getStartedFromSlide().getSlideNumber())

        print("Section: ", section.getName(), sep="")
        print("ID: ", section.getSectionId(), sep="")
        print("Starting slide: ", starting_slide, sep="")
        print("Slide count: ", section_slides.size(), sep="")

        if section_slides.size() > 0:
            print("First slide via get_Item: ", section_slides.get_Item(0).getSlideNumber(), sep="")

        print("Slide numbers:", end="")
        for slide in section_slides:
            print(" ", slide.getSlideNumber(), sep="", end="")
        print()
finally:
    presentation.dispose()

Die Zugehörigkeit zu einem Abschnitt wird durch die Abschnittsstruktur der Präsentation bestimmt. Berechnen Sie den Bereich eines Abschnitts nicht manuell aus Section.getStartedFromSlide, Folienindizes und der Startfolie des nächsten Abschnitts.

Strukturelle Änderungen können sowohl die für einen Abschnitt zurückgegebenen Folien als auch deren Foliennummern ändern. Dazu gehören das Neuordnen von Folien, das Klonen einer Folie in einen Abschnitt, das Verschieben eines Abschnitts zusammen mit seinen Folien, das Entfernen von Folien und das Entfernen von Abschnitten. Das nächste Beispiel ruft nach jeder solchen Änderung Section.getSlidesListOfSection auf, anstatt Annahmen über die früheren Grenzen des Abschnitts beizubehalten.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation

presentation = Presentation()
try:
    first_slide = presentation.getSlides().get_Item(0)
    layout_slide = presentation.getLayoutSlides().get_Item(0)
    presentation.getSlides().addEmptySlide(layout_slide)
    third_slide = presentation.getSlides().addEmptySlide(layout_slide)
    presentation.getSlides().addEmptySlide(layout_slide)
    first_section = presentation.getSections().addSection("First", first_slide)
    second_section = presentation.getSections().addSection("Second", third_slide)

    def print_section_slides(label, section):
        section_slides = section.getSlidesListOfSection()
        print(f"{label} ({section_slides.size()} slides):", end="")
        for slide in section_slides:
            print(" ", slide.getSlideNumber(), sep="", end="")
        print()

    print_section_slides("Initially", first_section)

    slides_before_clone = first_section.getSlidesListOfSection()
    presentation.getSlides().addClone(slides_before_clone.get_Item(0), first_section)
    print_section_slides("After cloning into the section", first_section)

    slides_before_reorder = first_section.getSlidesListOfSection()
    first_section_position = slides_before_reorder.get_Item(0).getSlideNumber() - 1
    presentation.getSlides().reorder(first_section_position, slides_before_reorder.get_Item(slides_before_reorder.size() - 1))
    print_section_slides("After reordering slides", first_section)

    presentation.getSections().reorderSectionWithSlides(first_section, 1)
    print_section_slides("After moving the section", first_section)

    slides_before_removal = first_section.getSlidesListOfSection()
    presentation.getSlides().remove(slides_before_removal.get_Item(0))
    print_section_slides("After removing a slide", first_section)

    presentation.getSections().removeSectionWithSlides(second_section)
    for section in presentation.getSections():
        print_section_slides("Remaining section", section)
finally:
    presentation.dispose()

Rufen Sie Section.getSlidesListOfSection erneut auf, wann immer Folien oder Abschnitte neu angeordnet, geklont, verschoben oder entfernt werden. Dadurch bleibt die nachfolgende Verarbeitung mit der aktuellen Präsentationsstruktur synchron.

Das PPT‑Format (PowerPoint 97–2003) bewahrt keine Abschnitts‑Metadaten. Verwenden Sie diesen Workflow mit einem Format, das Abschnitte unterstützt, wie PPTX; das Konvertieren zu PPT entfernt die für spätere Iterationen benötigte Abschnittsstruktur.

FAQ

Werden Abschnitte beim Speichern im PPT‑Format (PowerPoint 97–2003) beibehalten?

Nein. Das PPT‑Format unterstützt keine Abschnitts‑Metadaten, sodass die Abschnitts‑Gruppierung beim Speichern als .ppt verloren geht.

Kann ein kompletter Abschnitt “ausgeblendet” werden?

Nein. Ein Abschnitt hat keinen Sichtbarkeitsstatus. Um seinen Inhalt auszublenden, rufen Sie für jede Folie im Abschnitt Slide.setHidden auf.

Wie finde ich den Abschnitt, der eine Folie enthält?

Iterieren Sie über die Sammlung, die von Presentation.getSections zurückgegeben wird, rufen Sie für jeden Abschnitt Section.getSlidesListOfSection auf und vergleichen Sie die zurückgegebenen Folien mit der Ziel‑Folie. Für einen nicht leeren Abschnitt liefert Section.getStartedFromSlide seine erste Folie; für einen leeren Abschnitt wird None zurückgegeben.