Správa sekcí snímků v prezentacích pomocí JavaScriptu
Úvod
Sekce organizují po sobě jdoucí snímky do pojmenovaných skupin, aniž by měnily obsah snímku. S Aspose.Slides pro Node.js prostřednictvím Javy můžete vytvářet, přeskupovat, přejmenovávat, zkoumat a odstraňovat sekce pomocí metody Presentation.getSections.
Sekce jsou zejména 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, využijte API sekcí k určení příslušnosti místo odvození z pozic snímků.
Vytvář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, ze současné struktury sekcí v prezentaci.
Stejný SectionCollection vám také umožňuje:
- přesunout sekci spolu s jejími snímky pomocí SectionCollection.reorderSectionWithSlides;
- odstranit pouze definici sekce pomocí SectionCollection.removeSection, což zachová její snímky;
- odstranit sekci i s jejími snímky pomocí SectionCollection.removeSectionWithSlides;
- přidat prázdnou sekci na konec pomocí SectionCollection.appendEmptySection.
Následující příklad vytvoří dvě sekce, přesune jednu z nich, odstraní ji spolu s jejími snímky a přidá prázdnou sekci:
const aspose = require("aspose.slides.via.java");
const presentation = new aspose.slides.Presentation();
try {
const titleSlide = presentation.getSlides().get_Item(0);
const layoutSlide = presentation.getLayoutSlides().get_Item(0);
presentation.getSlides().addEmptySlide(layoutSlide);
const resultsSlide = presentation.getSlides().addEmptySlide(layoutSlide);
presentation.getSlides().addEmptySlide(layoutSlide);
presentation.getSections().addSection("Introduction", titleSlide);
const 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 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:
const aspose = require("aspose.slides.via.java");
const presentation = new aspose.slides.Presentation();
try {
const slide = presentation.getSlides().get_Item(0);
const section = presentation.getSections().addSection("Overview", slide);
section.setName("Introduction");
} finally {
presentation.dispose();
}
Získání snímků ze sekcí
Metoda Presentation.getSections vrací SectionCollection, ke které můžete přistupovat pomocí indexu. 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 a indexovaný přístup.
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í jak prvního snímku, tak každého snímku ve sbírce. Pro prázdnou sekci má vrácená kolekce velikost nula, indexovaný přístup je přeskočen a smyčka neprovádí žádné operace.
const aspose = require("aspose.slides.via.java");
const presentation = new aspose.slides.Presentation();
try {
const firstSlide = presentation.getSlides().get_Item(0);
const layoutSlide = presentation.getLayoutSlides().get_Item(0);
presentation.getSlides().addEmptySlide(layoutSlide);
const thirdSlide = presentation.getSlides().addEmptySlide(layoutSlide);
presentation.getSections().addSection("Introduction", firstSlide);
presentation.getSections().addSection("Details", thirdSlide);
presentation.getSections().appendEmptySection("Appendix");
const sections = presentation.getSections();
for (let sectionIndex = 0; sectionIndex < sections.size(); sectionIndex++) {
const section = sections.get_Item(sectionIndex);
const sectionSlides = section.getSlidesListOfSection();
const startingSlideObject = section.getStartedFromSlide();
const startingSlide = startingSlideObject === null ? "none" : startingSlideObject.getSlideNumber().toString();
console.log("Section: " + section.getName());
console.log("ID: " + section.getSectionId().toString());
console.log("Starting slide: " + startingSlide);
console.log("Slide count: " + sectionSlides.size());
if (sectionSlides.size() > 0) {
console.log("First slide via get_Item: " + sectionSlides.get_Item(0).getSlideNumber());
}
let slideNumbers = "Slide numbers:";
for (let slideIndex = 0; slideIndex < sectionSlides.size(); slideIndex++) {
slideNumbers += " " + sectionSlides.get_Item(slideIndex).getSlideNumber();
}
console.log(slideNumbers);
}
} finally {
presentation.dispose();
}
Příslušnost ke sekci je určena strukturou sekcí v prezentaci. Nepočítejte ručně rozsah sekce 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 přeskupování snímků, klonování snímku do sekce, přesunutí sekce spolu s jejími snímky, odstraňování snímků a odstraňování sekcí. Další příklad volá Section.getSlidesListOfSection po každé takové změně místo zachování předpokladů o dřívějších hranicích sekce.
const aspose = require("aspose.slides.via.java");
const presentation = new aspose.slides.Presentation();
try {
const firstSlide = presentation.getSlides().get_Item(0);
const layoutSlide = presentation.getLayoutSlides().get_Item(0);
presentation.getSlides().addEmptySlide(layoutSlide);
const thirdSlide = presentation.getSlides().addEmptySlide(layoutSlide);
presentation.getSlides().addEmptySlide(layoutSlide);
const firstSection = presentation.getSections().addSection("First", firstSlide);
const secondSection = presentation.getSections().addSection("Second", thirdSlide);
const printSectionSlides = (label, section) => {
const sectionSlides = section.getSlidesListOfSection();
let output = label + " (" + sectionSlides.size() + " slides):";
for (let slideIndex = 0; slideIndex < sectionSlides.size(); slideIndex++) {
output += " " + sectionSlides.get_Item(slideIndex).getSlideNumber();
}
console.log(output);
};
printSectionSlides("Initially", firstSection);
const slidesBeforeClone = firstSection.getSlidesListOfSection();
presentation.getSlides().addClone(slidesBeforeClone.get_Item(0), firstSection);
printSectionSlides("After cloning into the section", firstSection);
const slidesBeforeReorder = firstSection.getSlidesListOfSection();
const firstSectionPosition = slidesBeforeReorder.get_Item(0).getSlideNumber() - 1;
const lastSlideInSection = slidesBeforeReorder.get_Item(slidesBeforeReorder.size() - 1);
presentation.getSlides().reorder(firstSectionPosition, lastSlideInSection);
printSectionSlides("After reordering slides", firstSection);
presentation.getSections().reorderSectionWithSlides(firstSection, 1);
printSectionSlides("After moving the section", firstSection);
const slidesBeforeRemoval = firstSection.getSlidesListOfSection();
presentation.getSlides().remove(slidesBeforeRemoval.get_Item(0));
printSectionSlides("After removing a slide", firstSection);
presentation.getSections().removeSectionWithSlides(secondSection);
const remainingSections = presentation.getSections();
for (let sectionIndex = 0; sectionIndex < remainingSections.size(); sectionIndex++) {
printSectionSlides("Remaining section", remainingSections.get_Item(sectionIndex));
}
} finally {
presentation.dispose();
}
Volajte Section.getSlidesListOfSection znovu vždy, když jsou snímky nebo sekce přeskupeny, 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; převod na PPT odstraní strukturu sekcí potřebnou pro následnou 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í je při uložení do .ppt ztraceno.
Lze celou sekci „skrýt“?
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 konkrétní snímek?
Projděte každou sekci ve sbírce vrácené metodou Presentation.getSections, zavolejte pro ni Section.getSlidesListOfSection a porovnejte vrácené snímky s požadovaným snímkem. Pro ne‑prázdnou sekci vrací Section.getStartedFromSlide její první snímek; pro prázdnou sekci vrací null.