Prezentációs helykitöltők kezelése Java-ban
Áttekintés
A helykitöltő egy alakzat, amely egy adott típusú tartalom számára fenntart helyet egy prezentációs sablonban. Gyakori példák a cím, a törzs, a kép, a diagram és az általános célú tartalomhelykitöltők. Egy egyszerű alakzattól eltérően a helykitöltő örökölheti a pozícióját, méretét, formázását és egyéb beállításait egy elrendezési vagy fődia (master) diáról.
Az Aspose.Slides a helykitöltő információkat a IShape.getPlaceholder metóduson keresztül teszi elérhetővé. A metódus egy IPlaceholder objektumot ad vissza, vagy null‑t egy normál alakzatra. Használja az IPlaceholder.getType metódust annak meghatározásához, hogy a helykitöltő milyen tartalomra van szánva.
Az alakzat interfész továbbra is fontos, miután ismeri a helykitöltő típusát:
- Egy üres szöveg-, kép-, diagram- vagy tartalomhelykitöltő általában egy IAutoShape által van reprezentálva.
- Egy kitöltött képhelykitöltő reprezentálható egy IPictureFrame segítségével.
- Egy kitöltött diagramhelykitöltő reprezentálható egy IChart segítségével.
- Egy tartalomhelykitöltő többféle tartalmat is tartalmazhat. Ellenőrizze mind az IPlaceholder.getType metódust, mind a futási időbeli alakzat interfészt, ahelyett, hogy azt feltételezné, hogy minden helykitöltő egy IAutoShape.
Warning
IPlaceholder.getType leírja a helykitöltő szerepét; ez nem garantálja az alakzat futásidejű típusát. Mindig végezzen típusellenőrzést, mielőtt szöveghez, képhez, diagramhoz, táblához vagy média‑specifikus tagokhoz férne hozzá.A helykitöltő öröklődés megértése
A helykitöltők hierarchiát alkotnak:
- A mesterdia (master slide) újrahasználható stílusokat határoz meg, és bizonyos esetekben mester szintű helykitöltőket is.
- Az elrendezési dia (layout slide) meghatározza a elrendezést, amelyet egy vagy több normál dia használ, és örökölhet a mesterdától.
- Egy normál dia tartalmazza a helykitöltőket az adott diára, és örökölhet az elrendezéséből.
Hívja meg az IShape.getBasePlaceholder metódust, hogy egy szinttel feljebb lépjen ebben a hierarchiában. Egy diahelykitöltő általában visszaadja az elrendezési helykitöltőt; egy elrendezési helykitöltő visszaadhatja a mesterhelykitöltőt. A metódus null‑t ad vissza, ha az alakzatnak nincs bázishelykitöltője.
Az alábbi példa felsorolja az első diához tartozó helykitöltőket, és jelentést készít azok bázishelykitöltőiről:
import com.aspose.slides.*;
Presentation presentation = new Presentation("template.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
for (IShape shape : slide.getShapes()) {
IPlaceholder placeholder = shape.getPlaceholder();
if (placeholder == null) {
continue;
}
byte placeholderType = placeholder.getType();
String typeName = shape.getClass().getSimpleName();
String slidePlaceholderMessage = "Slide placeholder: " + placeholderType + "; shape interface: " + typeName;
System.out.println(slidePlaceholderMessage);
IShape layoutPlaceholder = shape.getBasePlaceholder();
if (layoutPlaceholder != null) {
IPlaceholder layoutPlaceholderInfo = layoutPlaceholder.getPlaceholder();
Byte layoutPlaceholderType = layoutPlaceholderInfo == null ? null : layoutPlaceholderInfo.getType();
String layoutPlaceholderMessage = " Layout placeholder: " + layoutPlaceholderType;
System.out.println(layoutPlaceholderMessage);
IShape masterPlaceholder = layoutPlaceholder.getBasePlaceholder();
if (masterPlaceholder != null) {
IPlaceholder masterPlaceholderInfo = masterPlaceholder.getPlaceholder();
Byte masterPlaceholderType = masterPlaceholderInfo == null ? null : masterPlaceholderInfo.getType();
String masterPlaceholderMessage = " Master placeholder: " + masterPlaceholderType;
System.out.println(masterPlaceholderMessage);
}
}
}
} finally {
presentation.dispose();
}
Egy helykitöltő szerkesztése egy normál dián lokális felülírást hoz létre vagy módosít azon a dián. A kapcsolódó elrendezés vagy mester szerkesztése hatással lehet az összes olyan diára, amely még örökli ezt a beállítást. Egy lokális egyszerű alakzatnak nincs bázishelykitöltője, és nem kezd el örökölni csak azért, mert ugyanazokat a koordinátákat foglalja el.
Szöveg módosítása egy helykitöltőben
A cím, középre igazított cím, alcím, törzs és szöveghelykitöltők általában támogatják a szöveget. Ellenőrizze, hogy IAutoShape van‑e jelen, mielőtt a getTextFrame metódust használná.
Ez a példa frissíti az első címhelykitöltőt az első dián, és elmenti az eredményt:
import com.aspose.slides.*;
Presentation presentation = new Presentation("template.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape titleShape = null;
for (IShape shape : slide.getShapes()) {
if (!(shape instanceof IAutoShape)) {
continue;
}
IAutoShape autoShape = (IAutoShape) shape;
IPlaceholder placeholder = autoShape.getPlaceholder();
if (placeholder == null) {
continue;
}
byte placeholderType = placeholder.getType();
if (placeholderType == PlaceholderType.Title || placeholderType == PlaceholderType.CenteredTitle) {
titleShape = autoShape;
break;
}
}
if (titleShape == null) {
throw new IllegalStateException("The first slide does not contain a title placeholder.");
}
titleShape.getTextFrame().setText("Quarterly Business Review");
presentation.save("title-placeholder-updated.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Ez a minta elkerüli a kép, diagram, tábla vagy média helykitöltők IAutoShape-ra való átkonvertálását. Emellett a helykitöltőt a célja alapján azonosítja, ahelyett, hogy egy törékeny alakzat indexre támaszkodna.
Útmutató szöveg beállítása egy elrendezésen
Az útmutató szöveg egy üres helykitöltőben megjelenő tervezési időbeli utasítás, például Kattintson a cím hozzáadásához. Állítson be egyedi útmutató szöveget az elrendezési helykitöltőn, ahelyett, hogy egy normál dia alakzatelémén keresztül próbálná elérni. Az elrendezéshez az ISlide.getLayoutSlide segítségével férhet hozzá, majd iteráljon a ILayoutSlide.getShapes által visszaadott gyűjteményen.
Az alábbi példa megváltoztatja a cím és az alcím útmutató szövegét az első dián használt elrendezésen:
import com.aspose.slides.*;
Presentation presentation = new Presentation("template.pptx");
try {
ILayoutSlide layoutSlide = presentation.getSlides().get_Item(0).getLayoutSlide();
for (IShape shape : layoutSlide.getShapes()) {
if (!(shape instanceof IAutoShape)) {
continue;
}
IAutoShape autoShape = (IAutoShape) shape;
IPlaceholder placeholder = autoShape.getPlaceholder();
if (placeholder == null) {
continue;
}
byte placeholderType = placeholder.getType();
if (placeholderType == PlaceholderType.Title || placeholderType == PlaceholderType.CenteredTitle) {
autoShape.getTextFrame().setText("Enter a concise slide title");
} else if (placeholderType == PlaceholderType.Subtitle) {
autoShape.getTextFrame().setText("Enter a subtitle or reporting period");
}
}
presentation.save("custom-placeholder-prompts.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Az útmutató szöveg nem normál dia tartalom. Üres helykitöltőkre szánták szerkesztőalkalmazásokban, például a PowerPointban. Miután egy felhasználó vagy program valós tartalmat ad meg, az útmutató már nem jelenik meg. Az útmutató módosítása nem cseréli le a meglévő szöveget azokra a diákra, amelyek az elrendezést használják.
Képhelykitöltő frissítése
Két esetet kell kezelni:
- Ha a képhelykitöltő már kitöltött és egy IPictureFrame reprezentálja, cserélje le a képet az IPictureFillFormat.getPicture és az ISlidesPicture.setImage segítségével.
- Ha még üres helykitöltő, adjon hozzá egy képkeretet a helykitöltő koordinátáihoz az IShapeCollection.addPictureFrame segítségével, majd távolítsa el az üres helykitöltőt.
A következő példa mindkét esetet támogatja, és elmenti a prezentációt:
import com.aspose.slides.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
Presentation presentation = new Presentation("picture-template.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IShape picturePlaceholder = null;
for (IShape shape : slide.getShapes()) {
IPlaceholder placeholder = shape.getPlaceholder();
if (placeholder != null && placeholder.getType() == PlaceholderType.Picture) {
picturePlaceholder = shape;
break;
}
}
if (picturePlaceholder == null) {
throw new IllegalStateException("The first slide does not contain a picture placeholder.");
}
Path imagePath = Paths.get("replacement.png");
byte[] imageBytes = Files.readAllBytes(imagePath);
IPPImage image = presentation.getImages().addImage(imageBytes);
if (picturePlaceholder instanceof IPictureFrame) {
IPictureFrame pictureFrame = (IPictureFrame) picturePlaceholder;
pictureFrame.getPictureFormat().getPicture().setImage(image);
} else {
slide.getShapes().addPictureFrame(ShapeType.Rectangle, picturePlaceholder.getX(), picturePlaceholder.getY(), picturePlaceholder.getWidth(), picturePlaceholder.getHeight(), image);
slide.getShapes().remove(picturePlaceholder);
}
presentation.save("picture-placeholder-updated.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Az üres helykitöltőhöz létrehozott csere egy lokális képkeret, nem új helykitöltő, mivel az IShape.getPlaceholder nem biztosít beállítót. Megőrzi a fenntartott pozíciót, de már nem örököl helykitöltő‑specifikus viselkedést. Ha a helykitöltő kapcsolat megtartása létfontosságú, először PowerPointban készítse elő és töltse fel a helykitöltőt, majd frissítse a kapott IPictureFrame objektumot az Aspose.Slides‑el.
Kép átlátszósága, vágása és egyéb képspecifikus hatások leírását lásd a Manage Picture Frames cikkben. Ezek a műveletek a képkerethez vagy a kép kitöltéséhez tartoznak, nem a helykitöltő metaadataihoz.
Diagram és tartalomhelykitöltők kezelése
Egy kitöltött diagramhelykitöltő egy IChart által reprezentálható. Ez a példa mind a helykitöltő típus, mind a futásidejű interfész alapján megtalálja az ilyen diagramot, megváltoztatja a címét, majd elmenti a fájlt:
import com.aspose.slides.*;
Presentation presentation = new Presentation("chart-template.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart placeholderChart = null;
for (IShape shape : slide.getShapes()) {
if (!(shape instanceof IChart)) {
continue;
}
IChart chart = (IChart) shape;
IPlaceholder placeholder = chart.getPlaceholder();
if (placeholder != null && placeholder.getType() == PlaceholderType.Chart) {
placeholderChart = chart;
break;
}
}
if (placeholderChart == null) {
throw new IllegalStateException("The first slide does not contain a populated chart placeholder.");
}
placeholderChart.setTitle(true);
placeholderChart.getChartTitle().addTextFrameForOverriding("Quarterly Revenue");
presentation.save("chart-placeholder-updated.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Egy általános tartalomhelykitöltő általában a PlaceholderType.Object értékkel rendelkezik. A PowerPointban ez többféle tartalomtípus (diagramok, táblák, diagramok, képek, média) indítására szolgál. Kitöltés után vizsgálja meg a tényleges alakzat interfészt, hogy megtudja, mit tartalmaz. Speciális elrendezések szintén kiterjeszthetik a PlaceholderType.Chart, PlaceholderType.Table, PlaceholderType.Picture, PlaceholderType.Media, vagy PlaceholderType.Diagram típusokat.
Az Aspose.Slides nem konvertál egy üres IAutoShape helykitöltőt IChart-ra pusztán az IPlaceholder.getType megváltoztatásával; a típust a felület nem engedi módosítani. Egy üres diagram vagy tartalomterület programozott feltöltéséhez adja hozzá a szükséges objektumot a helykitöltő koordinátáihoz, majd távolítsa el az üres helykitöltőt. A következő példa ezt végzi diagram esetén:
import com.aspose.slides.*;
Presentation presentation = new Presentation("content-template.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IShape targetPlaceholder = null;
for (IShape shape : slide.getShapes()) {
IPlaceholder placeholder = shape.getPlaceholder();
if (placeholder == null) {
continue;
}
byte placeholderType = placeholder.getType();
if (placeholderType == PlaceholderType.Chart || placeholderType == PlaceholderType.Object) {
targetPlaceholder = shape;
break;
}
}
if (targetPlaceholder == null) {
throw new IllegalStateException("The first slide does not contain a chart or content placeholder.");
}
IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, targetPlaceholder.getX(), targetPlaceholder.getY(), targetPlaceholder.getWidth(), targetPlaceholder.getHeight());
chart.setTitle(true);
chart.getChartTitle().addTextFrameForOverriding("Quarterly Revenue");
slide.getShapes().remove(targetPlaceholder);
presentation.save("content-placeholder-replaced-with-chart.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
A hozzáadott diagram egy egyszerű lokális diagram. Elfoglalja a helykitöltő területét, de nem örököl az elrendezési helykitöltőből. Használja a dedikált chart management articles anyagokat, ha kategóriákat, sorozatokat vagy munkafüzet‑adatokat kell cserélnie.
Teljes példa: Szöveg vagy kép tartalom frissítése
Az alábbi end‑to‑end példa megnyit egy sablont, keres az első dián cím vagy kép helykitöltőt, ellenőrzi a helykitöltő és alakzat típusokat, frissíti a megfelelő tartalmat, majd elmenti a kimenetet. A példa szándékosan elkerüli a formaindex feltételezését vagy minden helykitöltő ugyanarra az interfészre való átkonvertálását.
import com.aspose.slides.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
Presentation presentation = new Presentation("template.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
boolean updated = false;
for (IShape shape : slide.getShapes()) {
IPlaceholder placeholder = shape.getPlaceholder();
if (placeholder == null) {
continue;
}
byte placeholderType = placeholder.getType();
if ((placeholderType == PlaceholderType.Title || placeholderType == PlaceholderType.CenteredTitle) && shape instanceof IAutoShape) {
IAutoShape titleShape = (IAutoShape) shape;
titleShape.getTextFrame().setText("Quarterly Business Review");
updated = true;
break;
}
if (placeholderType == PlaceholderType.Picture) {
Path imagePath = Paths.get("replacement.png");
byte[] imageBytes = Files.readAllBytes(imagePath);
IPPImage image = presentation.getImages().addImage(imageBytes);
if (shape instanceof IPictureFrame) {
IPictureFrame pictureFrame = (IPictureFrame) shape;
pictureFrame.getPictureFormat().getPicture().setImage(image);
} else {
slide.getShapes().addPictureFrame(ShapeType.Rectangle, shape.getX(), shape.getY(), shape.getWidth(), shape.getHeight(), image);
slide.getShapes().remove(shape);
}
updated = true;
break;
}
}
if (!updated) {
throw new IllegalStateException("No supported title or picture placeholder was found on the first slide.");
}
presentation.save("placeholder-content-updated.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
GYIK
Mi a bázishelykitöltő?
A bázishelykitöltő a megfelelő alakzat az elrendezésen vagy a mesteren, amelyből egy másik helykitöltő örököl. Használja az IShape.getBasePlaceholder metódust a lekéréséhez. Egy egyszerű lokális alakzat null‑t ad vissza, mert nem része a helykitöltő hierarchiának.
Módosíthatom az összes dia címét egy elrendezéshelykitöltő szerkesztésével?
Az örökölt formázást vagy útmutató szöveget elrendezésen keresztül módosíthatja, de a meglévő cím tartalom a normál diákon van tárolva. A valós cím szöveg cseréjéhez egy prezentációban iteráljon a diákon, és frissítse minden címhelykitöltőt.
Hogyan kezelem a dátum, dia‑szám, fejléc és lábléc helykitöltőket?
Használja a fejléc‑ és láblécke‑kezelőket a megfelelő dia, elrendezés, mester, jegyzet vagy kiosztás szintjén. Lásd a Manage Presentation Header and Footer cikket a teljes példákért.