Správa placeholderů prezentace v JavaScriptu
Přehled
Placeholder je tvar, který rezervuje pozici pro konkrétní typ obsahu v šabloně prezentace. Běžnými příklady jsou nadpis, tělo, obrázek, graf a obecné placeholdery pro obsah. Na rozdíl od běžného tvaru může placeholder dědit svou pozici, velikost, formátování a další nastavení z rozložení snímku nebo hlavního snímku.
Aspose.Slides zpřístupňuje informace o placeholderu pomocí metody Shape.getPlaceholder. Metoda vrací objekt Placeholder nebo null pro běžný tvar. K určení, co je placeholder určen k obsahu, použijte Placeholder.getType.
Třída tvaru má i po zjištění typu placeholderu význam:
- Prázdný textový, obrázkový, grafový nebo obsahový placeholder je běžně reprezentován pomocí AutoShape.
- Vyplněný obrázkový placeholder může být reprezentován pomocí PictureFrame.
- Vyplněný grafový placeholder může být reprezentován pomocí Chart.
- Obsahový placeholder může obsahovat několik typů obsahu. Zkontrolujte jak Placeholder.getType, tak runtime třídu tvaru místo předpokladu, že každý placeholder je AutoShape.
Warning
Placeholder.getType popisuje roli placeholderu; nezaručuje runtime typ tvaru. Vždy proveďte kontrolu typu před přístupem k textovým, obrázkovým, grafovým, tabulkovým nebo mediálním členům.Pochopení dědičnosti placeholderů
Placeholdery tvoří hierarchii:
- Hlavní snímek (master slide) definuje znovupoužitelné styly a v některých případech placeholdery na úrovni master.
- Rozložení snímku (layout slide) určuje uspořádání použité jedním nebo více normálními snímky a může dědit z hlavního snímku.
- Normální snímek obsahuje placeholdery pro daný snímek a může dědit ze svého rozložení.
Pro posun o úroveň výš v hierarchii zavolejte Shape.getBasePlaceholder. Placeholder snímku obvykle vrací svůj placeholder rozložení; placeholder rozložení může vrátit svůj master placeholder. Metoda vrací null, pokud tvar nemá základní placeholder.
Následující příklad vypíše placeholdery na prvním snímku a zobrazí jejich základní placeholdery:
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
function getShapeClassName(shape) {
if (java.instanceOf(shape, "com.aspose.slides.IAutoShape")) {
return "AutoShape";
}
if (java.instanceOf(shape, "com.aspose.slides.IPictureFrame")) {
return "PictureFrame";
}
if (java.instanceOf(shape, "com.aspose.slides.IChart")) {
return "Chart";
}
return "Shape";
}
const presentation = new aspose.slides.Presentation("template.pptx");
try {
const slides = presentation.getSlides();
const slide = slides.get_Item(0);
const shapes = slide.getShapes();
for (let i = 0; i < shapes.size(); i++) {
const shape = shapes.get_Item(i);
const placeholder = shape.getPlaceholder();
if (placeholder == null) {
continue;
}
const placeholderType = placeholder.getType();
const shapeClassName = getShapeClassName(shape);
const slidePlaceholderMessage = "Slide placeholder: " + placeholderType + "; shape class: " + shapeClassName;
console.log(slidePlaceholderMessage);
const layoutPlaceholder = shape.getBasePlaceholder();
if (layoutPlaceholder != null) {
const layoutPlaceholderInfo = layoutPlaceholder.getPlaceholder();
const layoutPlaceholderType = layoutPlaceholderInfo == null ? null : layoutPlaceholderInfo.getType();
const layoutPlaceholderMessage = " Layout placeholder: " + layoutPlaceholderType;
console.log(layoutPlaceholderMessage);
const masterPlaceholder = layoutPlaceholder.getBasePlaceholder();
if (masterPlaceholder != null) {
const masterPlaceholderInfo = masterPlaceholder.getPlaceholder();
const masterPlaceholderType = masterPlaceholderInfo == null ? null : masterPlaceholderInfo.getType();
const masterPlaceholderMessage = " Master placeholder: " + masterPlaceholderType;
console.log(masterPlaceholderMessage);
}
}
}
} finally {
presentation.dispose();
}
Úprava placeholderu na normálním snímku vytvoří nebo změní lokální přepsání pro tento snímek. Úprava souvisejícího rozložení nebo masteru může ovlivnit všechny snímky, které stále dědí toto nastavení. Lokální běžný tvar nemá základní placeholder a nezačne dědit jen proto, že sdílí stejné souřadnice.
Změna textu v placeholderu
Nadpis, střední nadpis, podtitul, tělo a textové placeholdery běžně podporují text. Před použitím metody getTextFrame ověřte, že se jedná o AutoShape.
Tento příklad aktualizuje první placeholder nadpisu na prvním snímku a uloží výsledek:
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const presentation = new aspose.slides.Presentation("template.pptx");
try {
const slides = presentation.getSlides();
const slide = slides.get_Item(0);
const shapes = slide.getShapes();
let titleShape = null;
for (let i = 0; i < shapes.size(); i++) {
const shape = shapes.get_Item(i);
if (!java.instanceOf(shape, "com.aspose.slides.IAutoShape")) {
continue;
}
const placeholder = shape.getPlaceholder();
if (placeholder == null) {
continue;
}
const placeholderType = placeholder.getType();
if (placeholderType === aspose.slides.PlaceholderType.Title || placeholderType === aspose.slides.PlaceholderType.CenteredTitle) {
titleShape = shape;
break;
}
}
if (titleShape == null) {
throw new Error("The first slide does not contain a title placeholder.");
}
titleShape.getTextFrame().setText("Quarterly Business Review");
presentation.save("title-placeholder-updated.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Tento vzor se vyhýbá zacházení s obrázkovými, grafovými, tabulkovými nebo mediálními placeholdery jako s objekty AutoShape. Identifikuje placeholder podle účelu místo spolehnutí se na křehký index tvaru.
Nastavení výzvy (prompt) na rozložení
Výzva (prompt) je instrukce zobrazená v prázdném placeholderu během návrhu, např. Click to add title. Nastavte vlastní výzvu na placeholderu rozložení místo pokusu o dosažení přes kolekci tvarů normálního snímku. Přístup k rozložení získáte pomocí Slide.getLayoutSlide a iterujte přes kolekci vrácenou metodou BaseSlide.getShapes.
Následující příklad mění výzvy nadpisu a podtitulku na rozložení použitém prvním snímkem:
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const presentation = new aspose.slides.Presentation("template.pptx");
try {
const slides = presentation.getSlides();
const firstSlide = slides.get_Item(0);
const layoutSlide = firstSlide.getLayoutSlide();
const shapes = layoutSlide.getShapes();
for (let i = 0; i < shapes.size(); i++) {
const shape = shapes.get_Item(i);
if (!java.instanceOf(shape, "com.aspose.slides.IAutoShape")) {
continue;
}
const placeholder = shape.getPlaceholder();
if (placeholder == null) {
continue;
}
const placeholderType = placeholder.getType();
if (placeholderType === aspose.slides.PlaceholderType.Title || placeholderType === aspose.slides.PlaceholderType.CenteredTitle) {
shape.getTextFrame().setText("Enter a concise slide title");
} else if (placeholderType === aspose.slides.PlaceholderType.Subtitle) {
shape.getTextFrame().setText("Enter a subtitle or reporting period");
}
}
presentation.save("custom-placeholder-prompts.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Výzva není obvyklý obsah snímku. Je určena pro prázdné placeholdery v editovacích aplikacích, jako je PowerPoint. Jakmile uživatel nebo program poskytne skutečný obsah, výzva už není zobrazena. Změna výzvy také nevymazává existující text na snímcích, které rozložení používají.
Aktualizace obrázkového placeholderu
Existují dva scénáře:
- Pokud je obrázkový placeholder již vyplněn a reprezentován pomocí PictureFrame, nahraďte obrázek pomocí PictureFrame.getPictureFormat, PictureFillFormat.getPicture a Picture.setImage.
- Pokud je stále prázdný placeholder, přidejte obrázkový rám na souřadnice placeholderu pomocí ShapeCollection.addPictureFrame a odstraňte prázdný placeholder.
Další příklad podporuje oba případy a uloží prezentaci:
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const presentation = new aspose.slides.Presentation("picture-template.pptx");
try {
const slides = presentation.getSlides();
const slide = slides.get_Item(0);
const shapes = slide.getShapes();
let picturePlaceholder = null;
for (let i = 0; i < shapes.size(); i++) {
const shape = shapes.get_Item(i);
const placeholder = shape.getPlaceholder();
if (placeholder != null && placeholder.getType() === aspose.slides.PlaceholderType.Picture) {
picturePlaceholder = shape;
break;
}
}
if (picturePlaceholder == null) {
throw new Error("The first slide does not contain a picture placeholder.");
}
const sourceImage = aspose.slides.Images.fromFile("replacement.png");
try {
const image = presentation.getImages().addImage(sourceImage);
if (java.instanceOf(picturePlaceholder, "com.aspose.slides.IPictureFrame")) {
picturePlaceholder.getPictureFormat().getPicture().setImage(image);
} else {
const x = picturePlaceholder.getX();
const y = picturePlaceholder.getY();
const width = picturePlaceholder.getWidth();
const height = picturePlaceholder.getHeight();
const frameX = java.newFloat(x);
const frameY = java.newFloat(y);
const frameWidth = java.newFloat(width);
const frameHeight = java.newFloat(height);
shapes.addPictureFrame(aspose.slides.ShapeType.Rectangle, frameX, frameY, frameWidth, frameHeight, image);
shapes.remove(picturePlaceholder);
}
} finally {
sourceImage.dispose();
}
presentation.save("picture-placeholder-updated.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Nahrazení vytvořené pro prázdný placeholder je lokální obrázkový rám, ne nový placeholder, protože Shape.getPlaceholder neposkytuje setter. Zachovává rezervovanou pozici, ale již nedědí chování specifické pro placeholder. Pokud je udržení vztahu placeholderu podstatné, připravte a naplňte placeholder v PowerPointu nejprve, pak aktualizujte vzniklý PictureFrame pomocí Aspose.Slides.
Pro průhlednost, ořez a další efekty specifické pro obrázek viz Manage Picture Frames. Tyto operace patří k obrázkovému rámci nebo výplni obrázku, ne k metadatům placeholderu.
Práce s grafovými a obsahovými placeholdery
Vyplněný grafový placeholder může být reprezentován pomocí Chart. Tento příklad najde takový graf podle typu placeholderu i runtime třídy, změní jeho nadpis a uloží soubor:
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const presentation = new aspose.slides.Presentation("chart-template.pptx");
try {
const slides = presentation.getSlides();
const slide = slides.get_Item(0);
const shapes = slide.getShapes();
let placeholderChart = null;
for (let i = 0; i < shapes.size(); i++) {
const shape = shapes.get_Item(i);
if (!java.instanceOf(shape, "com.aspose.slides.IChart")) {
continue;
}
const placeholder = shape.getPlaceholder();
if (placeholder != null && placeholder.getType() === aspose.slides.PlaceholderType.Chart) {
placeholderChart = shape;
break;
}
}
if (placeholderChart == null) {
throw new Error("The first slide does not contain a populated chart placeholder.");
}
placeholderChart.setTitle(true);
placeholderChart.getChartTitle().addTextFrameForOverriding("Quarterly Revenue");
presentation.save("chart-placeholder-updated.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Obecný obsahový placeholder obvykle má PlaceholderType.Object. V PowerPointu funguje jako spouštěč pro několik typů obsahu, včetně grafů, tabulek, diagramů, obrázků a médií. Po naplnění zkontrolujte skutečnou třídu tvaru, abyste zjistili, co obsahuje. Specializovaná rozložení mohou také vystavovat PlaceholderType.Chart, PlaceholderType.Table, PlaceholderType.Picture, PlaceholderType.Media nebo PlaceholderType.Diagram.
Aspose.Slides nepřevádí prázdný placeholder AutoShape na Chart pouhým změněním Placeholder.getType; typ nelze změnit přes objekt. Pro naplnění prázdné oblasti grafu nebo obsahu programově přidejte požadovaný objekt na souřadnice placeholderu a poté odstraňte prázdný placeholder. Následující příklad to provádí pro graf:
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const presentation = new aspose.slides.Presentation("content-template.pptx");
try {
const slides = presentation.getSlides();
const slide = slides.get_Item(0);
const shapes = slide.getShapes();
let targetPlaceholder = null;
for (let i = 0; i < shapes.size(); i++) {
const shape = shapes.get_Item(i);
const placeholder = shape.getPlaceholder();
if (placeholder == null) {
continue;
}
const placeholderType = placeholder.getType();
if (placeholderType === aspose.slides.PlaceholderType.Chart || placeholderType === aspose.slides.PlaceholderType.Object) {
targetPlaceholder = shape;
break;
}
}
if (targetPlaceholder == null) {
throw new Error("The first slide does not contain a chart or content placeholder.");
}
const x = targetPlaceholder.getX();
const y = targetPlaceholder.getY();
const width = targetPlaceholder.getWidth();
const height = targetPlaceholder.getHeight();
const chartX = java.newFloat(x);
const chartY = java.newFloat(y);
const chartWidth = java.newFloat(width);
const chartHeight = java.newFloat(height);
const chart = shapes.addChart(aspose.slides.ChartType.ClusteredColumn, chartX, chartY, chartWidth, chartHeight);
chart.setTitle(true);
chart.getChartTitle().addTextFrameForOverriding("Quarterly Revenue");
shapes.remove(targetPlaceholder);
presentation.save("content-placeholder-replaced-with-chart.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Přidaný graf je obyčejný lokální graf. Zabírá oblast placeholderu, ale nedědí z placeholderu rozložení. Použijte věnované články o správě grafů, když potřebujete nahradit jeho kategorie, řady nebo data sešitu.
Kompletní příklad: Aktualizace textového nebo obrázkového obsahu
Následující end‑to‑end příklad otevře šablonu, vyhledá na prvním snímku buď nadpisový, nebo obrázkový placeholder, zkontroluje typy placeholderu a tvaru, aktualizuje příslušný obsah a uloží výstup. Příklad úmyslně nepředpokládá index tvaru ani nezpracovává každý placeholder jako stejnou třídu.
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const presentation = new aspose.slides.Presentation("template.pptx");
try {
const slides = presentation.getSlides();
const slide = slides.get_Item(0);
const shapes = slide.getShapes();
let updated = false;
for (let i = 0; i < shapes.size(); i++) {
const shape = shapes.get_Item(i);
const placeholder = shape.getPlaceholder();
if (placeholder == null) {
continue;
}
const placeholderType = placeholder.getType();
const isTitlePlaceholder = placeholderType === aspose.slides.PlaceholderType.Title || placeholderType === aspose.slides.PlaceholderType.CenteredTitle;
if (isTitlePlaceholder && java.instanceOf(shape, "com.aspose.slides.IAutoShape")) {
shape.getTextFrame().setText("Quarterly Business Review");
updated = true;
break;
}
if (placeholderType === aspose.slides.PlaceholderType.Picture) {
const sourceImage = aspose.slides.Images.fromFile("replacement.png");
try {
const image = presentation.getImages().addImage(sourceImage);
if (java.instanceOf(shape, "com.aspose.slides.IPictureFrame")) {
shape.getPictureFormat().getPicture().setImage(image);
} else {
const x = shape.getX();
const y = shape.getY();
const width = shape.getWidth();
const height = shape.getHeight();
const frameX = java.newFloat(x);
const frameY = java.newFloat(y);
const frameWidth = java.newFloat(width);
const frameHeight = java.newFloat(height);
shapes.addPictureFrame(aspose.slides.ShapeType.Rectangle, frameX, frameY, frameWidth, frameHeight, image);
shapes.remove(shape);
}
} finally {
sourceImage.dispose();
}
updated = true;
break;
}
}
if (!updated) {
throw new Error("No supported title or picture placeholder was found on the first slide.");
}
presentation.save("placeholder-content-updated.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Často kladené otázky
Co je základní (base) placeholder?
Základní placeholder je odpovídající tvar na rozložení nebo masteru, ze kterého jiný placeholder dědí. K jeho získání použijte Shape.getBasePlaceholder. Běžný lokální tvar vrací null, protože není součástí hierarchie placeholderů.
Mohu změnit všechny nadpisy snímků úpravou placeholderu v rozložení?
Můžete změnit děděné formátování nebo text výzvy přes rozložení, ale existující obsah nadpisu je uložen na normálních snímcích. Pro nahrazení skutečného textu nadpisu napříč prezentací iterujte přes snímky a aktualizujte každý nadpisový placeholder.
Jak spravovat placeholdery pro datum, číslo snímku, záhlaví a zápatí?
Použijte správce záhlaví a zápatí v příslušném rozsahu – snímek, rozložení, master, poznámky nebo podklady. Viz Manage Presentation Header and Footer pro kompletní příklady.