Použít nebo změnit rozložení snímků v JavaScriptu

Přehled

Rozložení snímku určuje polohy a formátování zástupných znaků, jako jsou nadpisy, text, obrázky, grafy a tabulky. Použitím rozložení získají snímky jednotnou strukturu, přičemž každý snímek může obsahovat vlastní obsah.

Nejčastější rozložení jsou:

  • Title Slide: Obsahuje zástupné znaky pro nadpis a podnadpis.
  • Title and Content: Obsahuje zástupný znak pro nadpis a obecný zástupný znak pro obsah.
  • Blank: Neobsahuje žádné zástupné znaky a je užitečné, když budou všechny tvary umístěny ručně.

Pochopení dědičnosti rozložení

Prezentace má tři související úrovně:

  1. master slide definuje motiv, sdílené formátování, pozadí a společné objekty.
  2. layout slide patří k masteru a určuje konkrétní uspořádání zástupných znaků.
  3. normal slide používá jedno rozložení a ukládá obsah zadáný pro tento snímek.

Normální snímek dědí motiv a formátování ze svého rozložení a rozložení dědí z masteru. Hodnota nastavená přímo na normálním snímku přepíše zděděnou hodnotu na této úrovni. Při vytvoření normálního snímku se tvary zástupných znaků vygenerují podle vybraného rozložení, přičemž obsah zadaný do těchto zástupných znaků patří k normálnímu snímku.

Přidejte požadované zástupné znaky do rozložení před vytvořením snímků z něj. Přidání dalšího zástupného znaku do rozložení později automaticky nepřidá odpovídající tvar zástupného znaku do existujících normálních snímků.

Tento vztah má dva důležité důsledky:

  • Změna zděděného formátování nebo geometrie existujícího zástupného znaku v rozložení může aktualizovat každý snímek, který na něm závisí. Před úpravou rozložení, které se již používá, zkontrolujte jeho závislé snímky a prohlédněte výslednou prezentaci.
  • Rozložení, které je stále používáno nějakým snímkem, nelze odstranit. Nejprve přesuňte jeho závislé snímky na jiné rozložení nebo odstraňte pouze nepoužívaná rozložení.

Další informace o nejvyšší úrovni této hierarchie najdete v Slide Master.

Výběr a použití rozložení snímku

Použijte hodnotu SlideLayoutType, pokud prezentace následuje standardní definice rozložení PowerPointu. Názvy rozložení jsou editovatelné uživatelem a mohou být lokalizovány, takže výběr založený na názvu je méně spolehlivý, pokud neovládáte zdrojovou šablonu.

Následující příklad hledá Title and Content v prvním masteru. Pokud není toto rozložení k dispozici, úmyslně přejde na Blank. Druhá kontrola na null je nutná, protože prezentace může obsahovat jen vlastní rozložení. Vybrané rozložení se pak použije na první normální snímek pomocí metody Slide.setLayoutSlide.

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
const java = require("java");

let presentation = new aspose.slides.Presentation("input.pptx");
try {
    let layoutSlides = presentation.getMasters().get_Item(0).getLayoutSlides();
    let titleAndObjectLayoutType = java.newByte(aspose.slides.SlideLayoutType.TitleAndObject);
    let blankLayoutType = java.newByte(aspose.slides.SlideLayoutType.Blank);
    let targetLayout = layoutSlides.getByType(titleAndObjectLayoutType);

    if (targetLayout === null) {
        targetLayout = layoutSlides.getByType(blankLayoutType);
    }

    if (targetLayout === null) {
        throw new Error("The first master does not contain a suitable layout slide.");
    }

    presentation.getSlides().get_Item(0).setLayoutSlide(targetLayout);
    presentation.save("output-with-new-layout.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Změna rozložení snímku neodstraňuje běžné tvary přidané přímo do snímku. Nicméně pozice zástupných znaků, zděděné formátování a korespondence mezi existujícími zástupnými znaky a novým rozložením se mohou změnit, proto při přepínání mezi podstatně odlišnými rozloženími zkontrolujte výstup.

Přidání rozložení snímku

Výběr a vytvoření jsou oddělené operace. Předchozí příklad vybírá existující rozložení; nevytváří ho. Pro vytvoření rozložení zavolejte metodu MasterLayoutSlideCollection.add na kolekci rozložení cílového masteru.

Následující příklad vždy přidá nové rozložení Title and Content s názvem Report Title and Content a poté přidá normální snímek založený na něm. Názvy rozložení musí být v kolekci jedinečné.

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
const java = require("java");

let presentation = new aspose.slides.Presentation("input.pptx");
try {
    let masterSlide = presentation.getMasters().get_Item(0);
    let titleAndObjectLayoutType = java.newByte(aspose.slides.SlideLayoutType.TitleAndObject);
    let reportLayout = masterSlide.getLayoutSlides().add(titleAndObjectLayoutType, "Report Title and Content");
    presentation.getSlides().addEmptySlide(reportLayout);

    presentation.save("output-with-report-layout.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Přidejte rozložení jen tehdy, když šablona opravdu potřebuje další znovupoužitelnou strukturu. Pokud již vhodné rozložení existuje, vyberte a znovu jej použijte místo vytváření duplikátu.

Přidání zástupných znaků do rozložení snímku

Metoda LayoutSlide.getPlaceholderManager poskytuje LayoutPlaceholderManager pro přidání tvarů zástupných znaků do rozložení.

Zástupný znak PowerPoint LayoutPlaceholderManager Metoda
Content addContentPlaceholder(x, y, width, height)
Content (Vertical) addVerticalContentPlaceholder(x, y, width, height)
Text addTextPlaceholder(x, y, width, height)
Text (Vertical) addVerticalTextPlaceholder(x, y, width, height)
Picture addPicturePlaceholder(x, y, width, height)
Chart addChartPlaceholder(x, y, width, height)
Table addTablePlaceholder(x, y, width, height)
SmartArt addSmartArtPlaceholder(x, y, width, height)
Media addMediaPlaceholder(x, y, width, height)
Online Image addOnlineImagePlaceholder(x, y, width, height)

Následující příklad ověří, že rozložení Blank existuje, přidá k němu čtyři zástupné znaky a poté vytvoří normální snímek, který používá upravené rozložení. Pořadí je záměrné: zástupné znaky jsou přidány před vytvořením normálního snímku, takže Aspose.Slides může vygenerovat odpovídající tvary zástupných znaků na tomto snímku.

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
const java = require("java");

let presentation = new aspose.slides.Presentation();
try {
    let blankLayoutType = java.newByte(aspose.slides.SlideLayoutType.Blank);
    let blankLayout = presentation.getLayoutSlides().getByType(blankLayoutType);

    if (blankLayout === null) {
        throw new Error("The presentation does not contain a Blank layout slide.");
    }

    let placeholderManager = blankLayout.getPlaceholderManager();
    placeholderManager.addContentPlaceholder(20, 20, 310, 270);
    placeholderManager.addVerticalTextPlaceholder(350, 20, 350, 270);
    placeholderManager.addChartPlaceholder(20, 310, 310, 180);
    placeholderManager.addTablePlaceholder(350, 310, 350, 180);

    presentation.getSlides().addEmptySlide(blankLayout);
    presentation.save("output-with-placeholders.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Výsledek:

The placeholders on the layout slide

Odstranění nepoužívaných rozložení snímků

Použijte metodu Compress.removeUnusedLayoutSlides k odstranění rozložení, na která neodkazuje žádný normální snímek. Metoda ponechá rozložení, která jsou stále používána, nedotčena.

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");

let presentation = new aspose.slides.Presentation("input.pptx");
try {
    aspose.slides.Compress.removeUnusedLayoutSlides(presentation);
    presentation.save("output-without-unused-layouts.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Pro odstranění konkrétního rozložení nejprve použijte jeho metodu hasDependingSlides nebo getDependingSlides. Přesuňte všechny závislé snímky před voláním LayoutSlide.remove. Pokus o odstranění použitého rozložení vyvolá výjimku PptxEditException.

Řízení viditelnosti zápatí v rozložení snímku

Rozložení má vlastní zástupné znaky pro zápatí, číslo snímku a datum/čas. Použijte metodu LayoutSlide.getHeaderFooterManager k řízení těchto zástupných znaků pro jedno rozložení. To je užitečné, když například obsahová rozložení mají zobrazovat zápatí, ale rozložení nadpisů ne.

Následující příklad bezpečně vybere rozložení a učiní jeho prvky zápatí viditelnými:

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
const java = require("java");

let presentation = new aspose.slides.Presentation("input.pptx");
try {
    let titleAndObjectLayoutType = java.newByte(aspose.slides.SlideLayoutType.TitleAndObject);
    let blankLayoutType = java.newByte(aspose.slides.SlideLayoutType.Blank);
    let layoutSlide = presentation.getLayoutSlides().getByType(titleAndObjectLayoutType);

    if (layoutSlide === null) {
        layoutSlide = presentation.getLayoutSlides().getByType(blankLayoutType);
    }

    if (layoutSlide === null) {
        throw new Error("The presentation does not contain a suitable layout slide.");
    }

    let headerFooterManager = layoutSlide.getHeaderFooterManager();
    headerFooterManager.setFooterVisibility(true);
    headerFooterManager.setSlideNumberVisibility(true);
    headerFooterManager.setDateTimeVisibility(true);
    headerFooterManager.setFooterText("Footer text");
    headerFooterManager.setDateTimeText("Date and time text");

    presentation.save("output-with-layout-footers.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Řízení viditelnosti zápatí v masteru a jeho podřízených rozloženích

Pro použití konzistentních nastavení zápatí napříč hierarchií masteru použijte metodu MasterSlide.getHeaderFooterManager. Metody šíření MasterSlideHeaderFooterManager působí na master a jeho závislé rozložení snímků a normální snímky; netargetují jen jeden normální snímek.

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");

let presentation = new aspose.slides.Presentation("input.pptx");
try {
    let headerFooterManager = presentation.getMasters().get_Item(0).getHeaderFooterManager();
    headerFooterManager.setFooterAndChildFootersVisibility(true);
    headerFooterManager.setSlideNumberAndChildSlideNumbersVisibility(true);
    headerFooterManager.setDateTimeAndChildDateTimesVisibility(true);
    headerFooterManager.setFooterAndChildFootersText("Footer text");
    headerFooterManager.setDateTimeAndChildDateTimesText("Date and time text");

    presentation.save("output-with-master-footers.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Často kladené dotazy

Jaký je rozdíl mezi master snímkem a rozložením snímku?

Master snímek definuje motiv prezentace a sdílené formátování. Rozložení snímku patří k masteru a určuje jedno znovupoužitelné uspořádání zástupných znaků. Normální snímky používají tato rozložení a ukládají obsah specifický pro konkrétní snímek.

Mohu zkopírovat rozložení snímku z jedné prezentace do druhé?

Ano. Přidejte kopii do cílové kolekce pomocí metody addClone. Při kopírování mezi prezentacemi také ověřte písma, motivy, obrázky a další prostředky použité ve zdrojovém rozložení.

Co se stane, když upravím rozložení, které je již používáno?

Závislé snímky zdědí změny rozložení, pokud místně nepřepíší dotčené formátování nebo objekty. Geometrie zástupných znaků a zděděné styly se tak mohou změnit na mnoha snímcích najednou. Použijte getDependingSlides k identifikaci ovlivněných snímků před úpravou rozložení.

Co se stane, když odstraním rozložení, které je stále používáno?

Aspose.Slides vyvolá výjimku PptxEditException. Nejprve přesuňte závislé snímky, nebo použijte removeUnusedLayoutSlides k odstranění pouze neodkazovaných rozložení.