Spravovat sekce snímků v prezentacích pomocí Pythonu přes Javu

Úvod

Sekce organizují po sobě jdoucí snímky do pojmenovaných skupin, aniž by měnily obsah snímků. S Aspose.Slides pro Python prostřednictvím Javy můžete vytvářet, měnit pořadí, přejmenovávat, prohlížet a odstraňovat sekce pomocí metody Presentation.getSections.

Sekce jsou zvláště užitečné, když:

  • velká prezentace musí být rozdělena do logických témat nebo kapitol;
  • různé skupiny snímků jsou přiřazeny různým spolupracovníkům;
  • snímky je třeba zpracovávat, přesouvat nebo slučovat jako skupiny.

Zvolte stručné názvy sekcí, které popisují účel seskupených snímků. Protože sekce jsou součástí struktury prezentace, použijte API sekcí k určení příslušnosti místo odvození z pozic snímků.

Vytvoření a správa sekcí

Použijte SectionCollection.addSection k vytvoření sekce zadáním jejího názvu a úvodního snímku. Aspose.Slides určuje, které snímky patří do sekce, z aktuální struktury sekcí prezentace.

Stejná SectionCollection vám také umožňuje:

Následující příklad vytvoří dvě sekce, přesune jednu z nich, odstraní ji spolu se svými snímky a připojí prázdnou sekci:

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

Po těchto operacích obsahuje prezentace sekci Introduction s jejími snímky a prázdnou sekci Appendix. Sekce Results a její snímky byly odstraněny.

Přejmenování sekcí

Pro přejmenování sekce zavolejte její metodu Section.setName. Snímky sekce a její pozice zůstávají beze změny.

Následující příklad vytvoří sekci a změní její název:

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

Získání snímků ze sekcí

Metoda Presentation.getSections vrací SectionCollection, kterou můžete iterovat. Pro každou Section zavolejte Section.getSlidesListOfSection, abyste získali snímky, které do ní aktuálně patří. Metoda vrací SectionSlideCollection, která poskytuje počet, indexovaný přístup i iteraci.

Následující příklad vytvoří dvě naplněné sekce a jednu prázdnou sekci, poté vypíše pro každou sekci název, identifikátor, úvodní snímek, počet snímků a čísla snímků. Používá SectionSlideCollection.get_Item k načtení prvního snímku a příkaz for k zpracování každého snímku. Pro prázdnou sekci má vrácená kolekce velikost nula, metoda se nevolá a iterace neprovádí žádné operace.

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

Příslušnost k sekci je určena strukturou sekcí v prezentaci. Nepočítejte rozsah sekce ručně z Section.getStartedFromSlide, indexů snímků a úvodního snímku následující sekce.

Strukturální úpravy mohou změnit jak snímky vrácené pro sekci, tak jejich čísla. To zahrnuje změnu pořadí snímků, klonování snímku do sekce, přesunutí sekce spolu se svými snímky, odstraňování snímků i odstraňování sekcí. Následující příklad volá Section.getSlidesListOfSection po každé takové změně místo zachování předpokladů o bývalých mezích sekce.

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

Zavolejte Section.getSlidesListOfSection znovu vždy, když jsou snímky nebo sekce přeskládány, klonovány, přesouvány nebo odstraňovány. Tím zajistíte, že následné zpracování bude odpovídat aktuální struktuře prezentace.

Formát PPT (PowerPoint 97–2003) neuchovává metadata sekcí. Použijte tento postup s formátem, který sekce podporuje, například PPTX; převod do PPT odstraní strukturu sekcí potřebnou pro pozdější iteraci.

Často kladené otázky

Jsou sekce zachovány při ukládání do formátu PPT (PowerPoint 97–2003)?

Ne. Formát PPT nepodporuje metadata sekcí, takže seskupení sekcí se při ukládání do .ppt ztratí.

Může být celá sekce „skryta“?

Ne. Sekce nemá stav viditelnosti. Pro skrytí jejího obsahu zavolejte Slide.setHidden pro každý snímek v sekci.

Jak mohu najít sekci, která obsahuje snímek?

Iterujte přes kolekci vrácenou metodou Presentation.getSections, pro každou sekci zavolejte Section.getSlidesListOfSection a porovnejte vrácené snímky s cílovým snímkem. Pro ne‑prázdnou sekci metoda Section.getStartedFromSlide vrací její první snímek; pro prázdnou sekci vrací None.