Szövegdobozok kezelése prezentációkban PHP-vel
Bevezetés
A diákon a szövegek általában szövegdobozokban vagy alakzatokban jelennek meg. Ezért a diára szöveget hozzáadni egy szövegdobozt kell létrehozni, majd szöveget helyezni a dobobozba. Az Aspose.Slides for PHP via Java a AutoShape osztályt biztosítja, amely lehetővé teszi, hogy szöveget tartalmazó alakzatot adjunk hozzá.
Info
Az Aspose.Slides emellett a Shape osztályt is biztosítja, amely lehetővé teszi alakzatok hozzáadását a diákhoz. Azonban nem minden aShape osztályon keresztül hozzáadott alakzat képes szöveget tárolni. Azonban a AutoShape osztályon keresztül hozzáadott alakzatok tartalmazhatnak szöveget.
Megjegyzés
Ezért, ha olyan alakzattal dolgozunk, amelyhez szöveget szeretnénk hozzáadni, ellenőrizni kell, hogy azAutoShape osztályon keresztül lett-e létrehozva. Csak ekkor lehet a TextFrame tulajdonsággal dolgozni, amely az AutoShape alatti tulajdonság. Lásd a Update Text szakaszt ezen az oldalon.
Szövegdoboz létrehozása a dián
A szövegdoboz létrehozásához a dián kövesse az alábbi lépéseket:
- Hozzon létre egy példányt a Presentation osztályból.
- Szerezzen referenciát az újonnan létrehozott prezentáció első diájához.
- Adjon hozzá egy AutoShape objektumot, amelynek alakzattípusa Rectangle, a dián megadott pozícióban, és szerezze meg az újonnan hozzáadott
AutoShapeobjektum referenciáját. - Adjon egy
TextFrameelemet azAutoShapeobjektumhoz, amely szöveget tartalmaz. Az alábbi példában ezt a szöveget adtuk hozzá: Aspose TextBox - Végül írja ki a PPTX fájlt a
Presentationobjektumon keresztül.
Ez a PHP kód – a fenti lépések megvalósítása – megmutatja, hogyan adjon szöveget egy diához:
# Példányosítja a Presentation objektumot
$pres = new Presentation();
try {
# Lekéri a prezentáció első diáját
$sld = $pres->getSlides()->get_Item(0);
# Hozzáad egy AutoShape-et típusként Rectangle
$ashp = $sld->getShapes()->addAutoShape(ShapeType::Rectangle, 150, 75, 150, 50);
# Hozzáad egy TextFrame-et a Rectangle-hez
$ashp->addTextFrame(" ");
# Eléri a szövegkeretet
$txtFrame = $ashp->getTextFrame();
# Létrehozza a Paragraph objektumot a szövegkerethez
$para = $txtFrame->getParagraphs()->get_Item(0);
# Létrehozza a Portion objektumot a bekezdéshez
$portion = $para->getPortions()->get_Item(0);
# Beállítja a szöveget
$portion->setText("Aspose TextBox");
# Mentés a prezentációt a lemezre
$pres->save("TextBox_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Alakzat ellenőrzése szövegdobozként
Az Aspose.Slides a isTextBox metódust biztosítja az AutoShape osztályból, amely lehetővé teszi az alakzatok vizsgálatát és a szövegdobozok azonosítását.

Ez a PHP kód megmutatja, hogyan ellenőrizhetjük, hogy egy alakzat szövegdobozként lett-e létrehozva:
class ShapeCallback {
function invoke($shape, $slide, $index) {
if (java_instanceof($shape, new JavaClass("com.aspose.slides.AutoShape"))) {
$autoShape = $shape;
echo(java_is_true($autoShape->isTextBox()) ? "shape is a text box" : "shape is not a text box");
}
}
}
$presentation = new Presentation("sample.pptx");
try {
$forEachShapeCallback = java_closure(new ShapeCallback(), null, java("com.aspose.slides.ForEachSlideCallback"));
ForEach::shape($presentation, $forEachShapeCallback);
} finally {
$presentation->dispose();
}
Vegye figyelembe, hogy ha egyszerűen csak egy autoshape‑t ad hozzá a ShapeCollection osztály addAutoShape metódusával, az autoshape isTextBox metódusa false értéket ad vissza. Azonban ha szöveget ad a autoshape‑hez a addTextFrame vagy a setText metódussal, a isTextBox tulajdonság true értéket ad vissza.
$presentation = new Presentation();
$slide = $presentation->getSlides()->get_Item(0);
$shape1 = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 10, 100, 40);
// shape1->isTextBox() false-t ad vissza
$shape1->addTextFrame("shape 1");
// shape1->isTextBox() true-t ad vissza
$shape2 = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 110, 100, 40);
// shape2->isTextBox() false-t ad vissza
$shape2->getTextFrame()->setText("shape 2");
// shape2->isTextBox() true-t ad vissza
$shape3 = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 210, 100, 40);
// shape3->isTextBox() false-t ad vissza
$shape3->addTextFrame("");
// shape3->isTextBox() false-t ad vissza
$shape4 = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 310, 100, 40);
// shape4->isTextBox() false-t ad vissza
$shape4->getTextFrame()->setText("");
// shape4->isTextBox() false-t ad vissza
Oszlopok hozzáadása szövegdobozhoz
Az Aspose.Slides a setColumnCount és a setColumnSpacing metódusokat biztosítja a TextFrameFormat osztályból, amelyek lehetővé teszik oszlopok hozzáadását a szövegdobozokhoz. Megadhatja a szövegdobozban lévő oszlopok számát, és beállíthatja az oszlopok közötti távolságot pontban.
Ez a kód demonstrálja a leírt műveletet:
$pres = new Presentation();
try {
# Lekéri a prezentáció első diáját
$slide = $pres->getSlides()->get_Item(0);
# Hozzáad egy AutoShape-et típusként Rectangle
$aShape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 100, 100, 300, 300);
# Hozzáad egy TextFrame-et a Rectangle-hez
$aShape->addTextFrame("All these columns are limited to be within a single text container -- " . "you can add or delete text and the new or remaining text automatically adjusts " . "itself to flow within the container. You cannot have text flow from one container " . "to other though -- we told you PowerPoint's column options for text are limited!");
# Lekéri a TextFrame szövegformátumát
$format = $aShape->getTextFrame()->getTextFrameFormat();
# Meghatározza a oszlopok számát a TextFrame-ben
$format->setColumnCount(3);
# Meghatározza az oszlopok közötti távolságot
$format->setColumnSpacing(10);
# Mentés a prezentációt
$pres->save("ColumnCount.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Oszlopok hozzáadása szövegkerethez
Az Aspose.Slides for PHP via Java a setColumnCount metódust biztosítja a TextFrameFormat osztályból, amely lehetővé teszi oszlopok hozzáadását a szövegkeretekben. Ezen tulajdonság segítségével megadhatja a kívánt oszlopszámot a szövegkeretben.
Ez a PHP kód megmutatja, hogyan adjon egy oszlopot egy szövegkerethez:
$outPptxFileName = "ColumnsTest.pptx";
$pres = new Presentation();
try {
$shape1 = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Rectangle, 100, 100, 300, 300);
$format = $shape1->getTextFrame()->getTextFrameFormat();
$format->setColumnCount(2);
$shape1->getTextFrame()->setText("All these columns are forced to stay within a single text container -- " . "you can add or delete text - and the new or remaining text automatically adjusts " . "itself to stay within the container. You cannot have text spill over from one container " . "to other, though -- because PowerPoint's column options for text are limited!");
$pres->save($outPptxFileName, SaveFormat::Pptx);
$test = new Presentation($outPptxFileName);
try {
$autoShape = $test->getSlides()->get_Item(0)->getShapes()->get_Item(0);
Assert->assertTrue(2 == $autoShape->getTextFrame()->getTextFrameFormat()->getColumnCount());
Assert->assertTrue(Double->NaN == $autoShape->getTextFrame()->getTextFrameFormat()->getColumnSpacing());
} finally {
if (!java_is_null($test)) {
$test->dispose();
}
}
$format->setColumnSpacing(20);
$pres->save($outPptxFileName, SaveFormat::Pptx);
$test1 = new Presentation($outPptxFileName);
try {
$autoShape = $test1->getSlides()->get_Item(0)->getShapes()->get_Item(0);
Assert->assertTrue(2 == $autoShape->getTextFrame()->getTextFrameFormat()->getColumnCount());
Assert->assertTrue(20 == $autoShape->getTextFrame()->getTextFrameFormat()->getColumnSpacing());
} finally {
if (!java_is_null($test1)) {
$test1->dispose();
}
}
$format->setColumnCount(3);
$format->setColumnSpacing(15);
$pres->save($outPptxFileName, SaveFormat::Pptx);
$test2 = new Presentation($outPptxFileName);
try {
$autoShape = $test2->getSlides()->get_Item(0)->getShapes()->get_Item(0);
Assert->assertTrue(3 == $autoShape->getTextFrame()->getTextFrameFormat()->getColumnCount());
Assert->assertTrue(15 == $autoShape->getTextFrame()->getTextFrameFormat()->getColumnSpacing());
} finally {
if (!java_is_null($test2)) {
$test2->dispose();
}
}
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Szöveg frissítése
Az Aspose.Slides lehetővé teszi a szövegdobozban vagy a prezentációban lévő összes szöveg módosítását vagy frissítését.
Ez a PHP kód bemutat egy műveletet, amely a prezentációban lévő összes szöveget frissíti vagy megváltoztatja:
$pres = new Presentation("text.pptx");
try {
foreach($pres->getSlides() as $slide) {
foreach($slide->getShapes() as $shape) {
# Ellenőrzi, hogy az alakzat támogatja-e a szövegkeretet (IAutoShape).
if (java_instanceof($shape, new JavaClass("com.aspose.slides.AutoShape"))) {
$autoShape = $shape;
# Végigiterál a szövegkeret bekezdésein
foreach($autoShape->getTextFrame()->getParagraphs() as $paragraph) {
# Végigiterál a bekezdés minden részén
foreach($paragraph->getPortions() as $portion) {
$portion->setText($portion->getText()->replace("years", "months"));// Megváltoztatja a szöveget
$portion->getPortionFormat()->setFontBold(NullableBool::True);// Megváltoztatja a formázást
}
}
}
}
}
# Elmenti a módosított prezentációt
$pres->save("text-changed.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Szövegdoboz hozzáadása hiperhivatkozással
Hiperhivatkozást szúrhat be egy szövegdobozba. Amikor a szövegdobozra kattintanak, a felhasználók a hivatkozás megnyitására kerülnek irányításra.
A hivatkozást tartalmazó szövegdoboz hozzáadásához kövesse az alábbi lépéseket:
- Hozzon létre egy példányt a
Presentationosztályból. - Szerezzen referenciát az újonnan létrehozott prezentáció első diájához.
- Adjon hozzá egy
AutoShapeobjektumot, amelynekShapeTypeértékeRectangle, a dián megadott pozícióban, és szerezze meg az újonnan hozzáadott AutoShape objektum referenciáját. - Adjon egy
TextFrameelemet azAutoShapeobjektumhoz, amely Aspose TextBox alapértelmezett szöveget tartalmaz. - Hozza létre a
HyperlinkManagerosztályt. - Rendeljen hiperhivatkozást a setExternalHyperlinkClick metódus segítségével a
TextFramekívánt részéhez. - Végül írja ki a PPTX fájlt a
Presentationobjektumon keresztül.
Ez a PHP kód – a fenti lépések megvalósítása – megmutatja, hogyan adjon szövegdobozt hiperhivatkozással egy diához:
# Példányosít egy Presentation osztályt, amely egy PPTX-et képvisel
$pres = new Presentation();
try {
# Lekéri a prezentáció első diáját
$slide = $pres->getSlides()->get_Item(0);
# Hozzáad egy AutoShape objektumot, amelynek típusa Rectangle
$shape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 150, 150, 150, 50);
# Átalakítja az alakzatot AutoShape típusra
$pptxAutoShape = $shape;
# Eléri az AutoShape-hez kapcsolódó ITextFrame tulajdonságot
$pptxAutoShape->addTextFrame("");
$textFrame = $pptxAutoShape->getTextFrame();
# Szöveget ad a kerethez
$textFrame->getParagraphs()->get_Item(0)->getPortions()->get_Item(0)->setText("Aspose.Slides");
# Beállítja a hiperhivatkozást a rész szövegéhez
$hyperlinkManager = $textFrame->getParagraphs()->get_Item(0)->getPortions()->get_Item(0)->getPortionFormat()->getHyperlinkManager();
$hyperlinkManager->setExternalHyperlinkClick("http://www.aspose.com");
# Elmenti a PPTX prezentációt
$pres->save("hLink_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
GYIK
Mi a különbség egy szövegdoboz és egy szöveghelyettesítő között, amikor mesterdiákkal dolgozunk?
Egy placeholder örökli a stílust/pozíciót a master diától, és felülírható a layouts diáknál, míg egy hagyományos szövegdoboz egy független objektum egy adott dián, és nem változik, amikor elrendezéseket váltunk.
Hogyan hajthatok végre tömeges szövegcserét a prezentációban anélkül, hogy a diagramok, táblázatok és SmartArt szövegét módosítanám?
Korlátozza az iterációt azokra az autoshape‑okra, amelyeknek van szövegkerete, és hagyja ki a beágyazott objektumokat (charts, tables, SmartArt) úgy, hogy külön gyűjteményeken járja be őket, vagy kihagyja ezeket az objektumtípusokat.