Správa textových polí v prezentacích pomocí PHP
Úvod
Texty na snímcích jsou typicky v textových políčkách nebo tvarech. Proto, abyste přidali text na snímek, musíte přidat textové pole a poté do pole umístit text. Aspose.Slides pro PHP via Java poskytuje třídu AutoShape , která umožňuje přidat tvar obsahující text.
Info
Aspose.Slides také poskytuje třídu Shape , která umožňuje přidávat tvary na snímky. Nicméně ne všechny tvary přidané pomocí třídyShape mohou obsahovat text. Tvary přidané pomocí třídy AutoShape však mohou text obsahovat.
Note
Proto, pokud pracujete s tvarem, ke kterému chcete přidat text, možná budete chtít zkontrolovat a potvrdit, že byl vytvořen pomocí třídyAutoShape. Teprve poté budete moci pracovat s TextFrame, který je vlastností třídy AutoShape. Viz sekce Update Text na této stránce.
Vytvoření textového pole na snímku
Pro vytvoření textového pole na snímku postupujte podle následujících kroků:
- Vytvořte instanci třídy Presentation .
- Získejte odkaz na první snímek v nově vytvořené prezentaci.
- Přidejte objekt AutoShape s typem tvaru nastaveným na Rectangle na určené pozici na snímku a získejte odkaz na nově přidaný objekt
AutoShape. - Přidejte
TextFramek objektuAutoShape, který bude obsahovat text. V níže uvedeném příkladu jsme přidali tento text: Aspose TextBox - Nakonec zapište soubor PPTX přes objekt
Presentation.
Tento PHP kód — implementace výše uvedených kroků — ukazuje, jak přidat text na snímek:
# Vytvoří instanci Presentation
$pres = new Presentation();
try {
# Získá první snímek v prezentaci
$sld = $pres->getSlides()->get_Item(0);
# Přidá AutoShape s typem nastaveným na Rectangle
$ashp = $sld->getShapes()->addAutoShape(ShapeType::Rectangle, 150, 75, 150, 50);
# Přidá TextFrame do obdélníku
$ashp->addTextFrame(" ");
# Získá přístup k textovému rámci
$txtFrame = $ashp->getTextFrame();
# Vytvoří objekt Paragraph pro textový rámec
$para = $txtFrame->getParagraphs()->get_Item(0);
# Vytvoří objekt Portion pro odstavec
$portion = $para->getPortions()->get_Item(0);
# Nastaví text
$portion->setText("Aspose TextBox");
# Uloží prezentaci na disk
$pres->save("TextBox_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Kontrola textového pole
Aspose.Slides poskytuje metodu isTextBox z třídy AutoShape , která vám umožní prozkoumat tvary a identifikovat textová pole.

Tento PHP kód ukazuje, jak zkontrolovat, zda byl tvar vytvořen jako textové pole:
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();
}
Všimněte si, že pokud pouze přidáte auto-tvar pomocí metody addAutoShape z třídy ShapeCollection , metoda isTextBox tohoto auto-tvaru vrátí false. Po přidání textu do auto-tvaru pomocí metody addTextFrame nebo setText však vlastnost isTextBox vrátí true.
$presentation = new Presentation();
$slide = $presentation->getSlides()->get_Item(0);
$shape1 = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 10, 100, 40);
// shape1->isTextBox() vrací false
$shape1->addTextFrame("shape 1");
// shape1->isTextBox() vrací true
$shape2 = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 110, 100, 40);
// shape2->isTextBox() vrací false
$shape2->getTextFrame()->setText("shape 2");
// shape2->isTextBox() vrací true
$shape3 = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 210, 100, 40);
// shape3->isTextBox() vrací false
$shape3->addTextFrame("");
// shape3->isTextBox() vrací false
$shape4 = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 310, 100, 40);
// shape4->isTextBox() vrací false
$shape4->getTextFrame()->setText("");
// shape4->isTextBox() vrací false
Přidání sloupců do textového pole
Aspose.Slides poskytuje metody setColumnCount a setColumnSpacing z třídy TextFrameFormat , které umožňují přidat sloupce do textových polí. Můžete zadat počet sloupců v textovém poli a nastavit mezery mezi sloupci v bodech.
Tento kód demonstruje popsanou operaci:
$pres = new Presentation();
try {
# Získá první snímek v prezentaci
$slide = $pres->getSlides()->get_Item(0);
# Přidá AutoShape s typem nastaveným na Rectangle
$aShape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 100, 100, 300, 300);
# Přidá TextFrame do obdélníku
$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!");
# Získá formát textu TextFrame
$format = $aShape->getTextFrame()->getTextFrameFormat();
# Určuje počet sloupců v TextFrame
$format->setColumnCount(3);
# Určuje mezery mezi sloupci
$format->setColumnSpacing(10);
# Uloží prezentaci
$pres->save("ColumnCount.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Přidání sloupců do textového rámce
Aspose.Slides pro PHP via Java poskytuje metodu setColumnCount z třídy TextFrameFormat , která umožňuje přidat sloupce v textových rámcích. Pomocí této vlastnosti můžete určit požadovaný počet sloupců v textovém rámci.
Tento PHP kód ukazuje, jak přidat sloupec do textového rámce:
$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();
}
}
Aktualizace textu
Aspose.Slides vám umožňuje změnit nebo aktualizovat text obsažený v textovém poli nebo všechny texty v celé prezentaci.
Tento PHP kód demonstruje operaci, při které jsou všechny texty v prezentaci aktualizovány nebo změněny:
$pres = new Presentation("text.pptx");
try {
foreach($pres->getSlides() as $slide) {
foreach($slide->getShapes() as $shape) {
# Kontroluje, zda tvar podporuje textový rámec (IAutoShape).
if (java_instanceof($shape, new JavaClass("com.aspose.slides.AutoShape"))) {
$autoShape = $shape;
# Prochází odstavce v textovém rámci
foreach($autoShape->getTextFrame()->getParagraphs() as $paragraph) {
# Prochází jednotlivé části v odstavci
foreach($paragraph->getPortions() as $portion) {
$portion->setText($portion->getText()->replace("years", "months"));// Mění text
$portion->getPortionFormat()->setFontBold(NullableBool::True);// Mění formátování
}
}
}
}
}
# Uloží upravenou prezentaci
$pres->save("text-changed.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Přidání textového pole s hyperodkazem
Do textového pole můžete vložit odkaz. Po kliknutí na textové pole se uživatelé přesměrují na otevření odkazu.
Pro přidání textového pole obsahujícího odkaz postupujte podle těchto kroků:
- Vytvořte instanci třídy
Presentation. - Získejte odkaz na první snímek v nově vytvořené prezentaci.
- Přidejte objekt
AutoShapesShapeTypenastaveným naRectanglena určené pozici na snímku a získejte odkaz na nově přidaný objekt AutoShape. - Přidejte
TextFramek objektuAutoShape, který obsahuje Aspose TextBox jako výchozí text. - Vytvořte instanci třídy
HyperlinkManager. - Přiřaďte hyperodkaz pomocí metody setExternalHyperlinkClick spojené s požadovanou částí
TextFrame. - Nakonec zapište soubor PPTX přes objekt
Presentation.
Tento PHP kód — implementace výše uvedených kroků — ukazuje, jak přidat textové pole s hyperodkazem na snímek:
# Vytvoří instanci třídy Presentation, která představuje PPTX
$pres = new Presentation();
try {
# Získá první snímek v prezentaci
$slide = $pres->getSlides()->get_Item(0);
# Přidá objekt AutoShape s typem nastaveným na Rectangle
$shape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 150, 150, 150, 50);
# Přetypuje tvar na AutoShape
$pptxAutoShape = $shape;
# Získá přístup k vlastnosti ITextFrame spojené s AutoShape
$pptxAutoShape->addTextFrame("");
$textFrame = $pptxAutoShape->getTextFrame();
# Přidá nějaký text do rámce
$textFrame->getParagraphs()->get_Item(0)->getPortions()->get_Item(0)->setText("Aspose.Slides");
# Nastaví hyperodkaz pro text části
$hyperlinkManager = $textFrame->getParagraphs()->get_Item(0)->getPortions()->get_Item(0)->getPortionFormat()->getHyperlinkManager();
$hyperlinkManager->setExternalHyperlinkClick("http://www.aspose.com");
# Uloží PPTX prezentaci
$pres->save("hLink_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Často kladené otázky
Jaký je rozdíl mezi textovým polem a textovým zástupcem při práci s hlavními snímky?
placeholder dědí styl/pozici z master a může být přepsán na layouts, zatímco běžné textové pole je nezávislý objekt na konkrétním snímku a nemění se při přepínání rozvržení.
Jak mohu provést hromadnou výměnu textu v celé prezentaci, aniž bych zasáhl text v grafech, tabulkách a SmartArt?
Omezte iteraci na auto-tvary, které mají textové rámy, a vylučte vložené objekty (charts, tables, SmartArt) tím, že projdete jejich kolekce odděleně nebo přeskočíte tyto typy objektů.