Zarządzanie polami tekstowymi w prezentacjach przy użyciu PHP
Wprowadzenie
Teksty na slajdach zazwyczaj znajdują się w polach tekstowych lub kształtach. Dlatego, aby dodać tekst do slajdu, musisz dodać pole tekstowe, a następnie umieścić w nim jakiś tekst. Aspose.Slides for PHP via Java udostępnia klasę AutoShape pozwalającą dodać kształt zawierający tekst.
Info
Aspose.Slides udostępnia także klasę Shape pozwalającą dodawać kształty do slajdów. Jednak nie wszystkie kształty dodane przy użyciu klasyShape mogą zawierać tekst. Natomiast kształty dodane przy użyciu klasy AutoShape mogą zawierać tekst.
Note
Dlatego, pracując z kształtem, do którego chcesz dodać tekst, powinieneś sprawdzić i potwierdzić, że został on utworzony jako obiekt klasyAutoShape. Dopiero wtedy będziesz mógł pracować z TextFrame, który jest właściwością klasy AutoShape. Zobacz sekcję Update Text na tej stronie.
Utworzenie pola tekstowego na slajdzie
Aby utworzyć pole tekstowe na slajdzie, wykonaj następujące kroki:
- Utwórz instancję klasy Presentation.
- Uzyskaj referencję do pierwszego slajdu w nowo utworzonej prezentacji.
- Dodaj obiekt AutoShape z typem kształtu ustawionym na Rectangle w określonej pozycji na slajdzie i uzyskaj referencję do nowo dodanego obiektu
AutoShape. - Dodaj
TextFramedo obiektuAutoShape, który będzie zawierał tekst. W poniższym przykładzie dodaliśmy następujący tekst: Aspose TextBox - Na końcu zapisz plik PPTX przy użyciu obiektu
Presentation.
Ten kod PHP — implementacja powyższych kroków — pokazuje, jak dodać tekst do slajdu:
# Tworzy instancję prezentacji
$pres = new Presentation();
try {
# Pobiera pierwszy slajd w prezentacji
$sld = $pres->getSlides()->get_Item(0);
# Dodaje AutoShape z typem ustawionym na Rectangle
$ashp = $sld->getShapes()->addAutoShape(ShapeType::Rectangle, 150, 75, 150, 50);
# Dodaje TextFrame do prostokąta
$ashp->addTextFrame(" ");
# Uzyskuje dostęp do TextFrame
$txtFrame = $ashp->getTextFrame();
# Tworzy obiekt Paragraph dla ramki tekstowej
$para = $txtFrame->getParagraphs()->get_Item(0);
# Tworzy obiekt Portion dla akapitu
$portion = $para->getPortions()->get_Item(0);
# Ustawia tekst
$portion->setText("Aspose TextBox");
# Zapisuje prezentację na dysku
$pres->save("TextBox_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Sprawdzenie, czy kształt jest polem tekstowym
Aspose.Slides udostępnia metodę isTextBox z klasy AutoShape, umożliwiającą badanie kształtów i identyfikację pól tekstowych.

Ten kod PHP pokazuje, jak sprawdzić, czy kształt został utworzony jako pole tekstowe:
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();
}
Zauważ, że jeśli po prostu dodasz autokształt używając metody addAutoShape z klasy ShapeCollection, metoda isTextBox tego autokształtu zwróci false. Jednak po dodaniu tekstu do autokształtu przy użyciu metody addTextFrame lub setText, właściwość isTextBox zwróci true.
$presentation = new Presentation();
$slide = $presentation->getSlides()->get_Item(0);
$shape1 = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 10, 100, 40);
// shape1->isTextBox() zwraca false
$shape1->addTextFrame("shape 1");
// shape1->isTextBox() zwraca true
$shape2 = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 110, 100, 40);
// shape2->isTextBox() zwraca false
$shape2->getTextFrame()->setText("shape 2");
// shape2->isTextBox() zwraca true
$shape3 = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 210, 100, 40);
// shape3->isTextBox() zwraca false
$shape3->addTextFrame("");
// shape3->isTextBox() zwraca false
$shape4 = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 310, 100, 40);
// shape4->isTextBox() zwraca false
$shape4->getTextFrame()->setText("");
// shape4->isTextBox() zwraca false
Dodanie kolumn do pola tekstowego
Aspose.Slides udostępnia metody setColumnCount i setColumnSpacing z klasy TextFrameFormat, które pozwalają dodawać kolumny do pól tekstowych. Możesz określić liczbę kolumn w polu tekstowym oraz ustawić odstęp w punktach między kolumnami.
Ten kod demonstruje opisane działanie:
$pres = new Presentation();
try {
# Pobiera pierwszy slajd w prezentacji
$slide = $pres->getSlides()->get_Item(0);
# Dodaje AutoShape z typem ustawionym na Rectangle
$aShape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 100, 100, 300, 300);
# Dodaje TextFrame do prostokąta
$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!");
# Pobiera format tekstu z TextFrame
$format = $aShape->getTextFrame()->getTextFrameFormat();
# Określa liczbę kolumn w TextFrame
$format->setColumnCount(3);
# Określa odstęp między kolumnami
$format->setColumnSpacing(10);
# Zapisuje prezentację
$pres->save("ColumnCount.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Dodanie kolumn do ramki tekstowej
Aspose.Slides for PHP via Java udostępnia metodę setColumnCount z klasy TextFrameFormat, która pozwala dodawać kolumny w ramach tekstowych. Dzięki tej właściwości możesz określić preferowaną liczbę kolumn w ramce tekstowej.
Ten kod PHP pokazuje, jak dodać kolumnę wewnątrz ramki tekstowej:
$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();
}
}
Aktualizacja tekstu
Aspose.Slides umożliwia zmianę lub aktualizację tekstu zawartego w polu tekstowym lub wszystkich tekstów zawartych w prezentacji.
Ten kod PHP demonstruje operację, w której wszystkie teksty w prezentacji są aktualizowane lub zmieniane:
$pres = new Presentation("text.pptx");
try {
foreach($pres->getSlides() as $slide) {
foreach($slide->getShapes() as $shape) {
# Sprawdza, czy kształt obsługuje ramkę tekstową (IAutoShape).
if (java_instanceof($shape, new JavaClass("com.aspose.slides.AutoShape"))) {
$autoShape = $shape;
# Iteruje przez akapity w ramce tekstowej
foreach($autoShape->getTextFrame()->getParagraphs() as $paragraph) {
# Iteruje przez każdą część w akapicie
foreach($paragraph->getPortions() as $portion) {
$portion->setText($portion->getText()->replace("years", "months"));// Zmienia tekst
$portion->getPortionFormat()->setFontBold(NullableBool::True);// Zmienia formatowanie
}
}
}
}
}
# Zapisuje zmodyfikowaną prezentację
$pres->save("text-changed.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Dodanie pola tekstowego z hiperłączem
Możesz wstawić łącze wewnątrz pola tekstowego. Po kliknięciu pola tekstowego użytkownicy zostaną przekierowani do otwarcia tego łącza.
Aby dodać pole tekstowe zawierające łącze, wykonaj następujące kroki:
- Utwórz instancję klasy
Presentation. - Uzyskaj referencję do pierwszego slajdu w nowo utworzonej prezentacji.
- Dodaj obiekt
AutoShapezShapeTypeustawionym naRectanglew określonej pozycji na slajdzie i uzyskaj referencję do nowo dodanego obiektu AutoShape. - Dodaj
TextFramedo obiektuAutoShape, który zawiera Aspose TextBox jako domyślny tekst. - Zainicjuj klasę
HyperlinkManager. - Przypisz hiperłącze za pomocą metody setExternalHyperlinkClick powiązanej z wybraną częścią
TextFrame. - Na końcu zapisz plik PPTX przy użyciu obiektu
Presentation.
Ten kod PHP — implementacja powyższych kroków — pokazuje, jak dodać pole tekstowe z hiperłączem do slajdu:
# Tworzy instancję klasy Presentation, która reprezentuje plik PPTX
$pres = new Presentation();
try {
# Pobiera pierwszy slajd w prezentacji
$slide = $pres->getSlides()->get_Item(0);
# Dodaje obiekt AutoShape z typem ustawionym na Rectangle
$shape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 150, 150, 150, 50);
# Rzutuje kształt na AutoShape
$pptxAutoShape = $shape;
# Uzyskuje dostęp do właściwości ITextFrame powiązanej z AutoShape
$pptxAutoShape->addTextFrame("");
$textFrame = $pptxAutoShape->getTextFrame();
# Dodaje trochę tekstu do ramki
$textFrame->getParagraphs()->get_Item(0)->getPortions()->get_Item(0)->setText("Aspose.Slides");
# Ustawia hiperłącze dla tekstu części
$hyperlinkManager = $textFrame->getParagraphs()->get_Item(0)->getPortions()->get_Item(0)->getPortionFormat()->getHyperlinkManager();
$hyperlinkManager->setExternalHyperlinkClick("http://www.aspose.com");
# Zapisuje prezentację PPTX
$pres->save("hLink_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
FAQ
Jaka jest różnica między polem tekstowym a symbolem zastępczym tekstu podczas pracy ze slajdami wzorcowymi?
Placeholder dziedziczy styl/pozycję z mastera i może być nadpisany na layoutach, podczas gdy zwykłe pole tekstowe jest niezależnym obiektem na konkretnym slajdzie i nie zmienia się po przełączeniu layoutów.
Jak mogę wykonać masową zamianę tekstu w całej prezentacji, nie dotykając tekstu w wykresach, tabelach i SmartArt?
Ogranicz iterację do auto‑kształtów, które mają ramki tekstowe, i wyklucz wbudowane obiekty (charts, tables, SmartArt) przez przeglądanie ich kolekcji osobno lub pomijanie tych typów obiektów.