PHP-ben prezentációs alakzatok kezelése
Áttekintés
Ez a cikk bemutatja, hogyan dolgozhatunk alakzatokkal a prezentációkban az Aspose.Slides használatával. Megmutatja, hogyan találhatunk meg egy alakzatot egy dián, másolhatjuk azt, eltávolíthatjuk, elrejthetjük, módosíthatjuk a sorrendjét, lekérhetjük az Interop alakzatazonosítót, és beállíthatjuk az alternatív szöveget az azonosításhoz és a további feldolgozáshoz.
Emellett lefedi, hogyan érhetők el az alakzatok elrendezési formátumai, hogyan renderelhetünk egy alakzatot SVG-ként, hogyan igazíthatók az alakzatok egy dián, és hogyan használhatók a flip (tükrözés) tulajdonságok vízszintes és függőleges tükrözéshez. Továbbá a cikk egy rövid GYIK-ot tartalmaz az alakzatok kombinálásáról, a rétegezési sorrendről és az alakzatok zárolásáról.
Alakzat keresése egy dián
Ez a téma egy egyszerű technikát ismertet, amely megkönnyíti a fejlesztők számára egy adott alakzat megtalálását egy dián anélkül, hogy a belső azonosítóját használnák. Fontos tudni, hogy a PowerPoint prezentációfájloknak nincs módja az alakzatok azonosítására egy dián, kivéve a belső egyedi azonosítót. Nehézséget jelent a fejlesztőknek egy alakzat megtalálása a belső egyedi azonosítóval. Az összes diára hozzáadott alakzat rendelkezik valamilyen alternatív szöveggel. Javasoljuk, hogy a fejlesztők az alternatív szöveget használják egy adott alakzat megtalálásához. Az MS PowerPoint segítségével definiálhatja az alternatív szöveget azokhoz az objektumokhoz, amelyeket a jövőben módosítani kíván.
Az alternatív szöveg beállítása után a kívánt alakzatra megnyithatja a prezentációt az Aspose.Slides for PHP via Java segítségével, és végigiterálhat az egy diára hozzáadott összes 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 a keresett alakzat. Ennek a technikának a jobb bemutatására létrehoztunk egy findShape metódust, amely megtalálja a specifikus alakzatot egy dián, és egyszerűen visszaadja azt.
# Hozzon létre egy Presentation osztályt, amely a prezentáció fájlt képviseli
$pres = new Presentation("FindingShapeInSlide.pptx");
try {
$slide = $pres->getSlides()->get_Item(0);
# A megtalálandó alakzat alternatív szövege
$shape = findShape($slide, "Shape1");
if (!java_is_null($shape)) {
echo("Shape Name: " . $shape->getName());
}
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Alakzat klónozása
Alakzat klónozásához egy diára az Aspose.Slides for PHP via Java használatával:
- Hozzon létre egy példányt a Presentation osztályból.
- Szerezze meg egy dia referenciaját az indexének használatával.
- Hozzáférés a forrásdia alakzatgyűjteményéhez.
- Új dia hozzáadása a prezentációhoz.
- Alakzatok klónozása a forrásdia alakzatgyűjteményéből az új diába.
- A módosított prezentáció mentése PPTX fájlként.
Az alábbi példa egy csoportos alakzatot ad hozzá egy diához.
# Presentation osztály példányosítása
$pres = new Presentation("Source Frame.pptx");
try {
$sourceShapes = $pres->getSlides()->get_Item(0)->getShapes();
$blankLayout = $pres->getMasters()->get_Item(0)->getLayoutSlides()->getByType(SlideLayoutType::Blank);
$destSlide = $pres->getSlides()->addEmptySlide($blankLayout);
$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);
# PPTX fájl mentése a lemezre
$pres->save("CloneShape_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Alakzat eltávolítása
Az Aspose.Slides for PHP via Java lehetővé teszi a fejlesztők számára bármely alakzat eltávolítását. Egy alakzat eltávolításához egy diáról kövesse az alábbi lépéseket:
- Hozzon létre egy példányt a Presentation osztályból.
- Érje el az első diát.
- Keresse meg a megadott AlternativeText tulajdonságú alakzatot.
- Távolítsa el az alakzatot.
- Mentse a fájlt a lemezre.
# Presentation objektum létrehozása
$pres = new Presentation();
try {
# Az első dia lekérése
$sld = $pres->getSlides()->get_Item(0);
# Négyszög típusú autoshape hozzáadása
$sld->getShapes()->addAutoShape(ShapeType::Rectangle, 50, 40, 150, 50);
$sld->getShapes()->addAutoShape(ShapeType::Moon, 160, 40, 150, 50);
$altText = "User Defined";
$iCount = $sld->getShapes()->size();
for($i = 0; $i < java_values($iCount) ; $i++) {
$ashp = $sld->getShapes()->get_Item(0);
if ($alttext->equals($ashp->getAlternativeText())) {
$sld->getShapes()->remove($ashp);
}
}
# Prezentáció mentése a lemezre
$pres->save("RemoveShape_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Alakzat elrejtése
Az Aspose.Slides for PHP via Java lehetővé teszi a fejlesztők számára bármely alakzat elrejtését. Egy alakzat elrejtéséhez egy dián kövesse az alábbi lépéseket:
- Hozzon létre egy példányt a Presentation osztályból.
- Érje el az első diát.
- Keresse meg a megadott AlternativeText tulajdonságú alakzatot.
- Rejtse el az alakzatot.
- Mentse a fájlt a lemezre.
# Presentation osztály példányosítása, amely a PPTX-et képviseli
$pres = new Presentation();
try {
# Az első dia lekérése
$sld = $pres->getSlides()->get_Item(0);
# Négyszög típusú autoshape hozzáadása
$sld->getShapes()->addAutoShape(ShapeType::Rectangle, 50, 40, 150, 50);
$sld->getShapes()->addAutoShape(ShapeType::Moon, 160, 40, 150, 50);
$alttext = "User Defined";
$iCount = $sld->getShapes()->size();
for($i = 0; $i < java_values($iCount) ; $i++) {
$ashp = $sld->getShapes()->get_Item($i);
if ($alttext->equals($ashp->getAlternativeText())) {
$ashp->setHidden(true);
}
}
# Prezentáció mentése a lemezre
$pres->save("Hiding_Shapes_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Alakzat sorrendjének módosítása
Az Aspose.Slides for PHP 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, és melyik hátul. Egy alakzat újrarendezéséhez egy dián kövesse az alábbi lépéseket:
- Hozzon létre egy példányt a Presentation osztályból.
- Érje el az első diát.
- Adjon hozzá egy alakzatot.
- Adjon szöveget az alakzat szövegdobozához.
- Adjon hozzá egy másik alakzatot ugyanazzal a koordinátával.
- Rendezze át az alakzatokat.
- Mentse a fájlt a lemezre.
$pres = new Presentation("ChangeShapeOrder.pptx");
try {
$slide = $pres->getSlides()->get_Item(0);
$shp3 = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 200, 365, 400, 150);
$shp3->getFillFormat()->setFillType(FillType::NoFill);
$shp3->addTextFrame(" ");
$para = $shp3->getTextFrame()->getParagraphs()->get_Item(0);
$portion = $para->getPortions()->get_Item(0);
$portion->setText("Watermark Text Watermark Text Watermark Text");
$shp3 = $slide->getShapes()->addAutoShape(ShapeType::Triangle, 200, 365, 400, 150);
$slide->getShapes()->reorder(2, $shp3);
$pres->save("Reshape_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Interop alakzatazonosító lekérése
Az Aspose.Slides for PHP via Java lehetővé teszi a fejlesztők számára egy egyedi alakzatazonosító lekérését diára vonatkozóan, szemben a getUniqueId metódussal, amely a prezentáció szintjén ad egyedi azonosítót. A getOfficeInteropShapeId metódust hozzáadták a Shape osztályhoz. A getOfficeInteropShapeId metódus által visszaadott érték megfelel a Microsoft.Office.Interop.PowerPoint.Shape objektum Id értékének. Az alább egy példakód található.
$pres = new Presentation("Presentation.pptx");
try {
# Dia szintjén egyedi alakzatazonosító lekérése
$officeInteropShapeId = $pres->getSlides()->get_Item(0)->getShapes()->get_Item(0)->getOfficeInteropShapeId();
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Alternatív szöveg beállítása egy alakzathoz
Az Aspose.Slides for PHP via Java lehetővé teszi a fejlesztők számára bármely alakzat AlternateText (alternatív szöveg) beállítását.
A prezentációban lévő alakzatokat megkülönböztethetjük a Alternative Text vagy a Shape Name metódus segítségével.
A setAlternativeText és a getAlternativeText metódusok olvashatók és beállíthatók az Aspose.Slides, valamint a Microsoft PowerPoint használatával.
Ezzel a módszerrel címkézhetünk egy alakzatot, és különböző műveleteket hajthatunk végre, például alakzat eltávolítása,
alakzat elrejtése vagy alakzatok átrendezése egy dián.
Egy alakzat 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.
- Érje el az első diát.
- Adjon hozzá egy alakzatot a diához.
- Végezzen el némi munkát az újonnan hozzáadott alakzattal.
- Járja be az alakzatokat egy alakzat megtalálásához.
- Állítsa be az AlternativeText-et.
- Mentse a fájlt a lemezre.
# Presentation osztály példányosítása, amely a PPTX-et képviseli
$pres = new Presentation();
try {
# Az első dia lekérése
$sld = $pres->getSlides()->get_Item(0);
# Négyszög típusú autoshape hozzáadása
$shp1 = $sld->getShapes()->addAutoShape(ShapeType::Rectangle, 50, 40, 150, 50);
$shp2 = $sld->getShapes()->addAutoShape(ShapeType::Moon, 160, 40, 150, 50);
$shp2->getFillFormat()->setFillType(FillType::Solid);
$shp2->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->GRAY);
for($i = 0; $i < java_values($sld->getShapes()->size()) ; $i++) {
$shape = $sld->getShapes()->get_Item($i);
if (!java_is_null($shape)) {
$shape->setAlternativeText("User Defined");
}
}
# Prezentáció mentése a lemezre
$pres->save("Set_AlternativeText_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Elrendezési formátumok elérése egy alakzathoz
Az Aspose.Slides for PHP via Java egyszerű API-t biztosít az alakzatok elrendezési formátumainak eléréséhez. Ez a cikk bemutatja, hogyan érheti el az elrendezési formátumokat.
Az alábbi példakód található.
$pres = new Presentation("pres.pptx");
try {
foreach($pres->getLayoutSlides() as $layoutSlide) {
foreach($layoutSlide->getShapes() as $shape) {
$fillFormats = $shape->getFillFormat();
$lineFormats = $shape->getLineFormat();
}
}
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Alakzat renderelése SVG-ként
Az Aspose.Slides for PHP via Java most már támogatja egy alakzat SVG-ként történő renderelését. A writeAsSvg (és annak túlterhelése) metódus hozzá lett adva a Shape osztályhoz. Ez a metódus lehetővé teszi az alakzat tartalmának SVG fájlként történő mentését. Az alábbi kódrészlet megmutatja, hogyan exportálhatjuk egy dia alakzatát SVG fájlba.
$pres = new Presentation("TestExportShapeToSvg.pptx");
try {
$stream = new Java("java.io.FileOutputStream", "SingleShape.svg");
try {
$pres->getSlides()->get_Item(0)->getShapes()->get_Item(0)->writeAsSvg($stream);
} finally {
if (!java_is_null($stream)) {
$stream->close();
}
}
} catch (JavaException $e) {
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Alakzat igazítása
Az Aspose.Slides lehetővé teszi az alakzatok igazítását a dia margóihoz vagy egymáshoz viszonyítva. Ehhez hozzá lett adva a túlterhelt SlidesUtil::alignShapes metódus. A ShapesAlignmentType felsorolás meghatározza 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 a dia felső szélén igazítja.
$pres = new Presentation("example.pptx");
try {
$slide = $pres->getSlides()->get_Item(0);
$shape1 = $slide->getShapes()->get_Item(1);
$shape2 = $slide->getShapes()->get_Item(2);
$shape3 = $slide->getShapes()->get_Item(4);
SlideUtil->alignShapes(ShapesAlignmentType::AlignTop, true, $pres->getSlides()->get_Item(0), array($slide->getShapes()->indexOf($shape1), $slide->getShapes()->indexOf($shape2), $slide->getShapes()->indexOf($shape3) ));
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Példa 2
Az alábbi példa azt mutatja, hogyan igazítható a teljes alakzatgyűjtemény a gyűjtemény legalsó alakzatához viszonyítva.
$pres = new Presentation("example.pptx");
try {
SlideUtil->alignShapes(ShapesAlignmentType::AlignBottom, false, $pres->getSlides()->get_Item(0));
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Tükrözés (Flip) tulajdonságok
Az Aspose.Slides ShapeFrame osztálya lehetővé teszi a alakzatok vízszintes és függőleges tükrözésének vezérlését a flipH és flipV tulajdonságokon keresztül. Mindkét tulajdonság NullableBool típusú, amely a True értékkel tükrözést, a False értékkel nincs tükrözést, vagy a NotDefined értékkel az alapértelmezett viselkedést jelenti. Ezek az értékek a alakzat Frame tulajdonságán keresztül érhetők el.
A tükrözési beállítások módosításához egy új ShapeFrame példányt hozunk létre az alakzat aktuális pozíciója és mérete, a kívánt flipH és flipV értékek, valamint a forgási szög megadásával. Ennek a példánynak a shape Frame tulajdonságához való hozzárendelése és a prezentáció mentése alkalmazza a tükrözési transzformációkat és elmenti azokat a kimeneti fájlba.
Tegyük fel, hogy van egy sample.pptx fájlunk, amelynek első diája egyetlen, alapértelmezett tükrözési beállításokkal rendelkező alakzatot tartalmaz, ahogy az alább látható.

Az alábbi kódrészlet lekéri az alakzat aktuális flip tulajdonságait, és vízszintesen illetve függőlegesen is tükrözi azt.
$presentation = new Presentation("sample.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$shape = $slide->getShapes()->get_Item(0);
// Az alakzat vízszintes tükrözés tulajdonságának lekérdezése.
$horizontalFlip = $shape->getFrame()->getFlipH();
echo "Horizontal flip: ", $horizontalFlip, "\n";
// Az alakzat függőleges tükrözés tulajdonságának lekérdezése.
$verticalFlip = $shape->getFrame()->getFlipV();
echo "Vertical flip: ", $verticalFlip, "\n";
$x = $shape->getFrame()->getX();
$y = $shape->getFrame()->getY();
$width = $shape->getFrame()->getWidth();
$height = $shape->getFrame()->getHeight();
$flipH = NullableBool::True; // Vízszintesen tükröz.
$flipV = NullableBool::True; // Vízszintesen tükröz.
$rotation = $shape->getFrame()->getRotation();
$shape->setFrame(new ShapeFrame($x, $y, $width, $height, $flipH, $flipV, $rotation));
$presentation->save("output.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Az eredmény:

GYIK
Kombinálhatok-e alakzatokat (unió/kereszteződés/kivonás) egy dián, mint egy asztali szerkesztőben?
Nincs beépített Boolean művelet API. A kívánt körvonalat saját maga építheti meg – például a GeometryPath segítségével kiszámíthatja az eredményes geometriát, és létrehozhat egy új alakzatot ezzel a körvonallal, opcionálisan eltávolítva az eredetieket.
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ény érdekében a z-sorrendet a többi dia módosítása után állítsa be véglegesnek.
„Zárolhat”‑e egy alakzatot, hogy a felhasználók ne szerkesszék PowerPointban?
Igen. Állítson be alakzatszintű védelmi jelzőket (például kiválasztás, mozgatás, átméretezés, szövegszerkesztés zárolása). Szükség esetén korlátozza a mestert vagy az elrendezést. 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‑olvasásra vonatkozó javaslatok vagy jelszavak.