Prezentációs alakzatok kezelése JavaScript-ben
Áttekintés
Ez a cikk bemutatja, hogyan dolgozhatunk alakzatokkal a prezentációkban az Aspose.Slides segítségével. Megmutatja, hogyan találhatunk egy alakzatot egy dián, klónozhatjuk, eltávolíthatjuk, elrejthetjük, módosíthatjuk a sorrendjét, lekérhetjük az Interop alakzat azonosítóját, és beállíthatjuk a helyettesítő szöveget a beazonosításhoz és a további feldolgozáshoz.
Továbbá lefedi, hogyan érhetjük el az elrendezési formátumokat az alakzatokhoz, hogyan renderelhetünk egy alakzatot SVG-ként, hogyan igazíthatjuk az alakzatokat egy dián, és hogyan használhatjuk a flip tulajdonságokat vízszintes és függőleges tükrözéshez. Emellett a cikk tartalmaz egy rövid GYIK-et az alakzat kombinálásáról, a rétegsorrendről és az alakzat zárolásáról.
Alakzat keresése a dián
Ez a téma egy egyszerű technikát mutat be, amely megkönnyíti a fejlesztők számára egy konkrét alakzat megtalálását a dián anélkül, hogy annak belső azonosítóját használnák. Fontos tudni, hogy a PowerPoint prezentációs fájlok nem rendelkeznek más módon az alakzatok azonosítására a dián, csak egy belső egyedi azonosítóval. A fejlesztőknek nehézséget jelent, ha a belső egyedi azonosítóval próbálnak egy alakzatot megtalálni. Minden diára hozzáadott alakzat rendelkezik valamilyen alternatív szöveggel. Javasoljuk, hogy a fejlesztők alternatív szöveget használjanak egy konkrét alakzat megtalálásához. A Microsoft PowerPointben definiálhatja az objektumok alternatív szövegét, amelyet a későbbiekben módosítani szeretne.
Miután beállította a kívánt alakzat alternatív szövegét, megnyithatja a prezentációt az Aspose.Slides for Node.js via Java segítségével, és végigiterálhat az összes diára hozzáadott alakzaton. Minden iteráció során ellenőrizheti az alakzat alternatív szövegét, és a megfelelő alternatív szöveggel rendelkező alakzat lesz az Ön által keresett. Ennek a technikának a jobb bemutatására létrehoztunk egy findShape nevű módszert, amely megoldja a konkrét alakzat megtalálását egy dián, és egyszerűen visszaadja azt az alakzatot.
// Példányosít egy Presentation osztályt, amely a prezentáció fájlt képviseli
var pres = new aspose.slides.Presentation("FindingShapeInSlide.pptx");
try {
var slide = pres.getSlides().get_Item(0);
// A megtalálandó alakzat alternatív szövege
var shape = findShape(slide, "Shape1");
if (shape != null) {
console.log("Shape Name: " + shape.getName());
}
} finally {
if (pres != null) {
pres.dispose();
}
}
function findShape(slide, altText) {
let shapes = slide.getShapes();
for (let i = 0; i < shapes.size(); i++) {
let shape = shapes.get_Item(i);
if (shape.getAlternativeText() === altText) {
return shape;
}
}
return null;
}
Alakzat klónozása
Alakzat klónozásához egy diára az Aspose.Slides for Node.js via Java segítségével:
- Hozzon létre egy példányt a Presentation osztályból.
- Szerezze be egy dia referenciáját az indexe alapján.
- Hozzáférjen a forrásdia alakzatgyűjteményéhez.
- Adjon hozzá egy új diát a prezentációhoz.
- Klónozza az alakzatokat a forrásdia alakzatgyűjteményéből az új diára.
- Mentse a módosított prezentációt PPTX fájlként.
Az alábbi példa egy csoportos alakzatot ad egy diához.
// Presentation osztály példányosítása
var pres = new aspose.slides.Presentation("Source Frame.pptx");
try {
var sourceShapes = pres.getSlides().get_Item(0).getShapes();
var blankLayout = pres.getMasters().get_Item(0).getLayoutSlides().getByType(aspose.slides.SlideLayoutType.Blank);
var destSlide = pres.getSlides().addEmptySlide(blankLayout);
var destShapes = destSlide.getShapes();
destShapes.addClone(sourceShapes.get_Item(1), 50, 150 + sourceShapes.get_Item(0).getHeight());
destShapes.addClone(sourceShapes.get_Item(2));
destShapes.insertClone(0, sourceShapes.get_Item(0), 50, 150);
// A PPTX fájl mentése lemezre
pres.save("CloneShape_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
Alakzat eltávolítása
Az Aspose.Slides for Node.js via Java lehetővé teszi a fejlesztők számára, hogy bármelyik alakzatot eltávolítsák. Az alakzat bármely diáról történő eltávolításához kövesse az alábbi lépéseket:
- Hozzon létre egy példányt a Presentation osztályból.
- Hozzáférjen az első diához.
- Keresse meg a specifikus AlternativeText tulajdonsággal rendelkező alakzatot.
- Távolítsa el az alakzatot.
- Mentse a fájlt lemezre.
// Prezentáció objektum létrehozása
var pres = new aspose.slides.Presentation();
try {
// Az első dia lekérése
var sld = pres.getSlides().get_Item(0);
// Téglalap típusú automatikus alakzat hozzáadása
sld.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 50, 40, 150, 50);
sld.getShapes().addAutoShape(aspose.slides.ShapeType.Moon, 160, 40, 150, 50);
var altText = "User Defined";
var iCount = sld.getShapes().size();
for (var i = 0; i < iCount; i++) {
var ashp = sld.getShapes().get_Item(0);
if (alttext === ashp.getAlternativeText()) {
sld.getShapes().remove(ashp);
}
}
// Prezentáció mentése lemezre
pres.save("RemoveShape_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
Alakzat elrejtése
Az Aspose.Slides for Node.js via Java lehetővé teszi a fejlesztők számára, hogy bármelyik alakzatot elrejtsék. Az alakzat egy diáról történő elrejtéséhez kövesse az alábbi lépéseket:
- Hozzon létre egy példányt a Presentation osztályból.
- Hozzáférjen az első diához.
- Keresse meg a specifikus AlternativeText tulajdonsággal rendelkező alakzatot.
- Rejtse el az alakzatot.
- Mentse a fájlt lemezre.
// Presentation osztály példányosítása, amely a PPTX-et képviseli
var pres = new aspose.slides.Presentation();
try {
// Az első dia lekérése
var sld = pres.getSlides().get_Item(0);
// Téglalap típusú automatikus alakzat hozzáadása
sld.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 50, 40, 150, 50);
sld.getShapes().addAutoShape(aspose.slides.ShapeType.Moon, 160, 40, 150, 50);
var alttext = "User Defined";
var iCount = sld.getShapes().size();
for (var i = 0; i < iCount; i++) {
var ashp = sld.getShapes().get_Item(i);
if (alttext === ashp.getAlternativeText()) {
ashp.setHidden(true);
}
}
// Prezentáció mentése lemezre
pres.save("Hiding_Shapes_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
Alakzatok sorrendjének módosítása
Az Aspose.Slides for Node.js via Java lehetővé teszi a fejlesztők számára az alakzatok újrarendezését. Az újrarendezés meghatározza, melyik alakzat van elöl vagy hátul. Az alakzat bármely dián történő újrarendezéséhez kövesse az alábbi lépéseket:
- Hozzon létre egy példányt a Presentation osztályból.
- Hozzáférjen az első diához.
- Adjon hozzá egy alakzatot.
- Helyezzen el némi szöveget az alakzat szövegdobozában.
- Adjon hozzá egy másik alakzatot ugyanazzal a koordinátával.
- Rendezzük át az alakzatokat.
- Mentse a fájlt lemezre.
var pres = new aspose.slides.Presentation("ChangeShapeOrder.pptx");
try {
var slide = pres.getSlides().get_Item(0);
var shp3 = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 200, 365, 400, 150);
shp3.getFillFormat().setFillType(java.newByte(aspose.slides.FillType.NoFill));
shp3.addTextFrame(" ");
var para = shp3.getTextFrame().getParagraphs().get_Item(0);
var portion = para.getPortions().get_Item(0);
portion.setText("Watermark Text Watermark Text Watermark Text");
shp3 = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Triangle, 200, 365, 400, 150);
slide.getShapes().reorder(2, shp3);
pres.save("Reshape_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
Interop alakzat ID lekérése
Az Aspose.Slides for Node.js via Java lehetővé teszi a fejlesztők számára, hogy egyedi alakzat-azonosítót kapjanak a dia szintjén, szemben a getUniqueId metódussal, amely a prezentáció szintjén ad egyedi azonosítót. A getOfficeInteropShapeId metódus a Shape osztályba került. Az getOfficeInteropShapeId metódus által visszaadott érték megfelel a Microsoft.Office.Interop.PowerPoint.Shape objektum Id értékének. Az alábbiakban egy példa kód látható.
var pres = new aspose.slides.Presentation("Presentation.pptx");
try {
// Egyedi alakzat-azonosító lekérése a diában
var officeInteropShapeId = pres.getSlides().get_Item(0).getShapes().get_Item(0).getOfficeInteropShapeId();
} finally {
if (pres != null) {
pres.dispose();
}
}
Alternatív szöveg beállítása az alakzathoz
Az Aspose.Slides for Node.js via Java lehetővé teszi a fejlesztők számára, hogy bármely alakzat AlternateText értékét beállítsák. A prezentációban az alakzatokat megkülönböztethetjük a AlternativeText vagy a Shape Name metódussal. A setAlternativeText és a getAlternativeText metódusokkal olvashatunk vagy írhatunk a Aspose.Slides vagy a Microsoft PowerPoint segítségével. Ezzel a módszerrel címkézhet egy alakzatot, és különböző műveleteket végezhet, például alakzat eltávolítása, alakzat elrejtése vagy alakzatok újrarendezése a dián. Az AlternateText beállításához kövesse az alábbi lépéseket:
- Hozzon létre egy példányt a Presentation osztályból.
- Hozzáférjen az első diához.
- Adjon hozzá bármilyen alakzatot a diához.
- Végezzen el némi munkát az újonnan hozzáadott alakzattal.
- Traversálja végig az alakzatokat egy alakzat megtalálásához.
- Állítsa be az AlternativeText-et.
- Mentse a fájlt lemezre.
// Presentation osztály példányosítása, amely a PPTX-et képviseli
var pres = new aspose.slides.Presentation();
try {
// Az első dia lekérése
var sld = pres.getSlides().get_Item(0);
// Téglalap típusú automatikus alakzat hozzáadása
var shp1 = sld.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 50, 40, 150, 50);
var shp2 = sld.getShapes().addAutoShape(aspose.slides.ShapeType.Moon, 160, 40, 150, 50);
shp2.getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
shp2.getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("java.awt.Color", "GRAY"));
for (var i = 0; i < sld.getShapes().size(); i++) {
var shape = sld.getShapes().get_Item(i);
if (shape != null) {
shape.setAlternativeText("User Defined");
}
}
// Prezentáció mentése lemezre
pres.save("Set_AlternativeText_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
Elrendezési formátumok elérése az alakzathoz
Az Aspose.Slides for Node.js via Java egyszerű API-t biztosít az alakzat elrendezési formátumainak eléréséhez. Ez a cikk bemutatja, hogyan érheti el az elrendezési formátumokat.
Az alábbi példa kód látható.
var pres = new aspose.slides.Presentation("pres.pptx");
try {
for (let i = 0; i < pres.getLayoutSlides().size(); i++) {
let layoutSlide = pres.getLayoutSlides().get_Item(i);
for (let j = 0; j < layoutSlide.getShapes().size(); j++) {
let shape = layoutSlide.getShapes().get_Item(j);
var fillFormats = shape.getFillFormat();
var lineFormats = shape.getLineFormat();
}
}
} finally {
if (pres != null) {
pres.dispose();
}
}
Alakzat renderelése SVG-ként
Az Aspose.Slides for Node.js via Java most már támogatja egy alakzat SVG-ként történő renderelését. A writeAsSvg (és annak overloadja) metódus a Shape osztályba került. Ez a metódus lehetővé teszi, hogy az alakzat tartalmát SVG fájlként mentse. Az alábbi kódrészlet bemutatja, hogyan exportálhatjuk egy dia alakzatát SVG-fájlba.
var pres = new aspose.slides.Presentation("TestExportShapeToSvg.pptx");
try {
var stream = java.newInstanceSync("java.io.FileOutputStream", "SingleShape.svg");
try {
pres.getSlides().get_Item(0).getShapes().get_Item(0).writeAsSvg(stream);
} finally {
if (stream != null) {
stream.close();
}
}
} catch (e) {console.log(e);
} finally {
if (pres != null) {
pres.dispose();
}
}
Alakzatok igazítása
Az Aspose.Slides lehetővé teszi az alakzatok igazítását a dia margóival vagy egymással szemben. Ehhez hozzáadtuk a túlterhelt SlidesUtil.alignShape() metódust. A ShapesAlignmentType felsorolás határozza meg a lehetséges igazítási lehetőségeket.
Példa 1
Az alábbi forráskód a 1., 2. és 4. indexű alakzatokat igazítja a dia felső szélén.
var pres = new aspose.slides.Presentation("example.pptx");
try {
var slide = pres.getSlides().get_Item(0);
var shape1 = slide.getShapes().get_Item(1);
var shape2 = slide.getShapes().get_Item(2);
var shape3 = slide.getShapes().get_Item(4);
aspose.slides.SlideUtil.alignShapes(aspose.slides.ShapesAlignmentType.AlignTop, true, pres.getSlides().get_Item(0), java.newArray("int", [slide.getShapes().indexOf(shape1), slide.getShapes().indexOf(shape2), slide.getShapes().indexOf(shape3)]));
} finally {
if (pres != null) {
pres.dispose();
}
}
Példa 2
Az alábbi példa azt mutatja be, hogyan igazítható a teljes alakzategyüttes a gyűjtemény legalsó alakzatához képest.
var pres = new aspose.slides.Presentation("example.pptx");
try {
aspose.slides.SlideUtil.alignShapes(aspose.slides.ShapesAlignmentType.AlignBottom, false, pres.getSlides().get_Item(0));
} finally {
if (pres != null) {
pres.dispose();
}
}
Flip tulajdonságok
Az Aspose.Slides-ben a ShapeFrame osztály lehetővé teszi a vízszintes és függőleges tükrözést a flipH és flipV tulajdonságokkal. Mindkét tulajdonság byte típusú, ahol az 1 érték tükrözést, a 0 érték nem tükrözést, a -1 az alapértelmezett viselkedést jelenti. Ezek az értékek egy alakzat Frame-ből érhetők el.
A flip beállítások módosításához egy új ShapeFrame példányt hozunk létre a forma aktuális pozíciójával és méretével, a kívánt flipH és flipV értékekkel, valamint a forgási szöggel. Ennek a példánynak a forma Frame-hez való hozzárendelése és a prezentáció mentése alkalmazza a tükrözési transzformációkat és elmenti őket a kimeneti fájlba.
Tegyük fel, hogy van egy sample.pptx fájlunk, amelynek az első diáján egyetlen alakzat van az alapértelmezett flip beállításokkal, ahogy alább látható.

Az alábbi kódrészlet lekéri az alakzat jelenlegi flip tulajdonságait, és mindkét irányban tükrözi azt.
var presentation = new asposeSlides.Presentation("sample.pptx");
try {
var slide = presentation.getSlides().get_Item(0);
var shape = slide.getShapes().get_Item(0);
// A forma vízszintes tükrözési tulajdonságának lekérése.
var horizontalFlip = shape.getFrame().getFlipH();
console.log("Horizontal flip:", horizontalFlip);
// A forma függőleges tükrözési tulajdonságának lekérése.
var verticalFlip = shape.getFrame().getFlipV();
console.log("Vertical flip:", verticalFlip);
var x = java.newFloat(shape.getFrame().getX());
var y = java.newFloat(shape.getFrame().getY());
var width = java.newFloat(shape.getFrame().getWidth());
var height = java.newFloat(shape.getFrame().getHeight());
var flipH = java.newByte(asposeSlides.NullableBool.True); // Vízszintesen tükröz.
var flipV = java.newByte(asposeSlides.NullableBool.True); // Függőlegesen tükröz.
var rotation = shape.getFrame().getRotation();
shape.setFrame(new asposeSlides.ShapeFrame(x, y, width, height, flipH, flipV, rotation));
presentation.save("output.pptx", asposeSlides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Az eredmény:

GYIK
Összevonhatok-e alakzatokat (unió/metszés/kivonás) egy dián, ahogy egy asztali szerkesztőben?
Nincs beépített logikai művelet API. Megközelítheti úgy, hogy magát a kívánt körvonalat építi fel – például kiszámítja a végső geometriát a GeometryPath segítségével, és egy új alakzatot hoz létre ezzel a körvonallal, opcionálisan eltávolítva az eredetit.
Hogyan szabályozhatom a rétegsorrendet (z-sorrendet), hogy egy alakzat mindig “felül” maradjon?
Módosítsa a beszúrási/áthelyezési sorrendet a dia shapes gyűjteményében. A kiszámítható eredmények érdekében a z-sorrendet a többi dia módosítása után véglegesítse.
Lehet-e “zárolni” egy alakzatot, hogy a PowerPoint felhasználók ne szerkeszthessék?
Igen. Állítson be alakzatszintű védelmi zászlókat (például kiválasztás, mozgatás, átméretezés, szövegszerkesztés zárolása). Szükség esetén tükrözze a korlátozásokat a mester vagy az elrendezés szintjén. Vegye figyelembe, hogy ez UI-szintű védelem, nem biztonsági funkció; erősebb védelemhez kombinálja fájlszintű korlátozásokkal, például csak olvasható ajánlásokkal vagy jelszavakkal.