Správa sekcí snímků v prezentacích na Androidu
Úvod
Sekce organizují po sobě jdoucí snímky do pojmenovaných skupin, aniž by měnily obsah snímku. S Aspose.Slides pro Android přes Java 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 na logické témy nebo kapitoly;
- různé skupiny snímků jsou přiřazeny různým spolupracovníkům;
- snímky je potř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ů.
Vytváření a správa sekcí
K vytvoření sekce zadáním jejího názvu a úvodního snímku použijte ISectionCollection.addSection . Aspose.Slides určuje, které snímky patří do sekce, na základě aktuální struktury sekcí v prezentaci.
Stejný ISectionCollection vám také umožňuje:
- přesunout sekci spolu s jejími snímky pomocí ISectionCollection.reorderSectionWithSlides;
- odstranit pouze definici sekce pomocí ISectionCollection.removeSection, přičemž snímky zůstávají zachovány;
- odstranit sekci i její snímky pomocí ISectionCollection.removeSectionWithSlides;
- přidat prázdnou sekci na konec pomocí ISectionCollection.appendEmptySection.
Následující příklad vytvoří dvě sekce, přesune jednu z nich, odstraní ji spolu s jejími snímky a připojí prázdnou sekci:
import com.aspose.slides.ILayoutSlide;
import com.aspose.slides.ISection;
import com.aspose.slides.ISlide;
import com.aspose.slides.Presentation;
Presentation presentation = new Presentation();
try {
ISlide titleSlide = presentation.getSlides().get_Item(0);
ILayoutSlide layoutSlide = presentation.getLayoutSlides().get_Item(0);
presentation.getSlides().addEmptySlide(layoutSlide);
ISlide resultsSlide = presentation.getSlides().addEmptySlide(layoutSlide);
presentation.getSlides().addEmptySlide(layoutSlide);
presentation.getSections().addSection("Introduction", titleSlide);
ISection resultsSection = presentation.getSections().addSection("Results", resultsSlide);
presentation.getSections().reorderSectionWithSlides(resultsSection, 0);
presentation.getSections().removeSectionWithSlides(resultsSection);
presentation.getSections().appendEmptySection("Appendix");
} finally {
presentation.dispose();
}
Po těchto operacích obsahuje prezentace sekci Introduction se svý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 ISection.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 com.aspose.slides.ISection;
import com.aspose.slides.ISlide;
import com.aspose.slides.Presentation;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
ISection section = presentation.getSections().addSection("Overview", slide);
section.setName("Introduction");
} finally {
presentation.dispose();
}
Získávání snímků ze sekcí
Metoda Presentation.getSections vrací ISectionCollection, kterou můžete iterovat. Pro každou ISection zavolejte ISection.getSlidesListOfSection a získáte snímky, které do ní aktuálně patří. Metoda vrací ISectionSlideCollection, 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ů. K načtení prvního snímku používá ISectionSlideCollection.get_Item a rozšířený for příkaz pro 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 com.aspose.slides.ILayoutSlide;
import com.aspose.slides.ISection;
import com.aspose.slides.ISectionSlideCollection;
import com.aspose.slides.ISlide;
import com.aspose.slides.Presentation;
Presentation presentation = new Presentation();
try {
ISlide firstSlide = presentation.getSlides().get_Item(0);
ILayoutSlide layoutSlide = presentation.getLayoutSlides().get_Item(0);
presentation.getSlides().addEmptySlide(layoutSlide);
ISlide thirdSlide = presentation.getSlides().addEmptySlide(layoutSlide);
presentation.getSections().addSection("Introduction", firstSlide);
presentation.getSections().addSection("Details", thirdSlide);
presentation.getSections().appendEmptySection("Appendix");
for (ISection section : presentation.getSections()) {
ISectionSlideCollection sectionSlides = section.getSlidesListOfSection();
String startingSlide = section.getStartedFromSlide() == null ? "none" : Integer.toString(section.getStartedFromSlide().getSlideNumber());
System.out.println("Section: " + section.getName());
System.out.println("ID: " + section.getSectionId());
System.out.println("Starting slide: " + startingSlide);
System.out.println("Slide count: " + sectionSlides.size());
if (sectionSlides.size() > 0) {
System.out.println("First slide via get_Item: " + sectionSlides.get_Item(0).getSlideNumber());
}
System.out.print("Slide numbers:");
for (ISlide slide : sectionSlides) {
System.out.print(" " + slide.getSlideNumber());
}
System.out.println();
}
} finally {
presentation.dispose();
}
Patřičnost ke sekci je určena strukturou sekcí v prezentaci. Nepočítejte rozsah sekce ručně z ISection.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řesun sekce spolu s jejími snímky, odstraňování snímků i odstraňování sekcí. Další příklad volá ISection.getSlidesListOfSection po každé takové změně místo spoléhání se na dříve předpokládané hranice sekce.
import com.aspose.slides.ILayoutSlide;
import com.aspose.slides.ISection;
import com.aspose.slides.ISectionSlideCollection;
import com.aspose.slides.ISlide;
import com.aspose.slides.Presentation;
import java.util.function.BiConsumer;
Presentation presentation = new Presentation();
try {
ISlide firstSlide = presentation.getSlides().get_Item(0);
ILayoutSlide layoutSlide = presentation.getLayoutSlides().get_Item(0);
presentation.getSlides().addEmptySlide(layoutSlide);
ISlide thirdSlide = presentation.getSlides().addEmptySlide(layoutSlide);
presentation.getSlides().addEmptySlide(layoutSlide);
ISection firstSection = presentation.getSections().addSection("First", firstSlide);
ISection secondSection = presentation.getSections().addSection("Second", thirdSlide);
BiConsumer<String, ISection> printSectionSlides = (label, section) -> {
ISectionSlideCollection sectionSlides = section.getSlidesListOfSection();
System.out.printf("%s (%d slides):", label, sectionSlides.size());
for (ISlide slide : sectionSlides) {
System.out.print(" " + slide.getSlideNumber());
}
System.out.println();
};
printSectionSlides.accept("Initially", firstSection);
ISectionSlideCollection slidesBeforeClone = firstSection.getSlidesListOfSection();
presentation.getSlides().addClone(slidesBeforeClone.get_Item(0), firstSection);
printSectionSlides.accept("After cloning into the section", firstSection);
ISectionSlideCollection slidesBeforeReorder = firstSection.getSlidesListOfSection();
int firstSectionPosition = slidesBeforeReorder.get_Item(0).getSlideNumber() - 1;
presentation.getSlides().reorder(firstSectionPosition, slidesBeforeReorder.get_Item(slidesBeforeReorder.size() - 1));
printSectionSlides.accept("After reordering slides", firstSection);
presentation.getSections().reorderSectionWithSlides(firstSection, 1);
printSectionSlides.accept("After moving the section", firstSection);
ISectionSlideCollection slidesBeforeRemoval = firstSection.getSlidesListOfSection();
presentation.getSlides().remove(slidesBeforeRemoval.get_Item(0));
printSectionSlides.accept("After removing a slide", firstSection);
presentation.getSections().removeSectionWithSlides(secondSection);
for (ISection section : presentation.getSections()) {
printSectionSlides.accept("Remaining section", section);
}
} finally {
presentation.dispose();
}
Volajte ISection.getSlidesListOfSection znovu vždy, když jsou snímky nebo sekce přeřazeny, klonovány, přesunuty nebo odstraně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žívejte tento postup s formátem, který sekce podporuje, například PPTX; konverze do PPT odstraní strukturu sekcí potřebnou pro pozdější iteraci.
Často kladené otázky
Zůstávají 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 „skrytá“?
Ne. Sekce nemá stav viditelnosti. Chcete-li skrýt její obsah, zavolejte ISlide.setHidden pro každý snímek v sekci.
Jak mohu najít sekci, která obsahuje konkrétní snímek?
Iterujte přes kolekci vrácenou metodou Presentation.getSections, pro každou sekci zavolejte ISection.getSlidesListOfSection a porovnejte vrácené snímky s cílovým snímkem. U ne‑prázdné sekce vrací ISection.getStartedFromSlide první snímek; u prázdné sekce vrací null.