Sunumlarda PHP Kullanarak Metin Kutularını Yönetme
Giriş
Slaytlardaki metinler genellikle metin kutuları veya şekiller içinde bulunur. Bu nedenle, bir slayta metin eklemek için önce bir metin kutusu eklemeli ve ardından metni bu kutuya yerleştirmelisiniz. Aspose.Slides for PHP via Java, içinde metin barındıran bir şekil eklemenizi sağlayan AutoShape sınıfını sunar.
Bilgi
Aspose.Slides ayrıca slaytlara şekil eklemenizi sağlayan Shape sınıfını da sunar. Ancak,Shape sınıfı üzerinden eklenen tüm şekiller metin içermeyebilir. AutoShape sınıfı üzerinden eklenen şekiller ise metin içerebilir.
Not
Bu nedenle, metin eklemek istediğiniz bir şekille çalışırken, şeklinAutoShape sınıfı üzerinden oluşturulduğunu kontrol edip doğrulamak isteyebilirsiniz. Ancak o zaman AutoShape altında bir özellik olan TextFrame ile çalışabilirsiniz. Bu sayfadaki Update Text bölümüne bakın.
Bir Slayta Metin Kutusu Oluşturma
Bir slayta metin kutusu oluşturmak için şu adımları izleyin:
- Presentation sınıfının bir örneğini oluşturun.
- Yeni oluşturulan sunumdaki ilk slayt için bir referans alın.
- Slayt üzerinde belirtilen bir konumda
Rectangleolarak ayarlanmış şekil türü ile bir AutoShape nesnesi ekleyin ve yeni eklenenAutoShapenesnesinin referansını alın. AutoShapenesnesine birTextFrameekleyin; bu çerçeve metin içerecektir. Aşağıdaki örnekte, Aspose TextBox metni eklendi.- Son olarak,
Presentationnesnesi aracılığıyla PPTX dosyasını kaydedin.
Yukarıdaki adımları uygulayan bu PHP kodu, bir slayta metin eklemenizi gösterir:
# Presentation nesnesini oluşturur
# Sunumdaki ilk slaytı alır
# Tipi Rectangle olarak ayarlanmış bir AutoShape ekler
# Rectangle'a bir TextFrame ekler
# TextFrame'e erişir
# TextFrame için Paragraph nesnesi oluşturur
# Paragraph için bir Portion nesnesi oluşturur
# Metni ayarlar
# Sunumu diske kaydeder
$pres = new Presentation();
try {
$sld = $pres->getSlides()->get_Item(0);
$ashp = $sld->getShapes()->addAutoShape(ShapeType::Rectangle, 150, 75, 150, 50);
$ashp->addTextFrame(" ");
$txtFrame = $ashp->getTextFrame();
$para = $txtFrame->getParagraphs()->get_Item(0);
$portion = $para->getPortions()->get_Item(0);
$portion->setText("Aspose TextBox");
$pres->save("TextBox_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Metin Kutusu Şekli Kontrolü
Aspose.Slides, şekilleri inceleyip metin kutularını tespit etmenizi sağlayan AutoShape sınıfındaki isTextBox yöntemini sunar.

Bu PHP kodu, bir şeklin metin kutusu olarak oluşturulup oluşturulmadığını nasıl kontrol edeceğinizi gösterir:
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();
}
Unutmayın ki, ShapeCollection sınıfındaki addAutoShape yöntemiyle bir autoshape eklediğinizde, bu autoshape’in isTextBox yöntemi false dönecektir. Ancak, addTextFrame veya setText yöntemleriyle autoshape’e metin eklediğinizde, isTextBox özelliği true döner.
$presentation = new Presentation();
$slide = $presentation->getSlides()->get_Item(0);
$shape1 = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 10, 100, 40);
// shape1->isTextBox() false döner
$shape1->addTextFrame("shape 1");
// shape1->isTextBox() true döner
$shape2 = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 110, 100, 40);
// shape2->isTextBox() false döner
$shape2->getTextFrame()->setText("shape 2");
// shape2->isTextBox() true döner
$shape3 = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 210, 100, 40);
// shape3->isTextBox() false döner
$shape3->addTextFrame("");
// shape3->isTextBox() false döner
$shape4 = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 310, 100, 40);
// shape4->isTextBox() false döner
$shape4->getTextFrame()->setText("");
// shape4->isTextBox() false döner
Metin Kutusuna Sütun Ekleme
Aspose.Slides, metin kutularına sütun eklemenizi sağlayan TextFrameFormat sınıfındaki setColumnCount ve setColumnSpacing yöntemlerini sunar. Bu sayede bir metin kutusundaki sütun sayısını ve sütunlar arasındaki boşluk miktarını puan (point) cinsinden belirleyebilirsiniz.
Bu kod, açıklanan işlemi gösterir:
$pres = new Presentation();
try {
# Sunumdaki ilk slaytı alır
$slide = $pres->getSlides()->get_Item(0);
# Tipi Rectangle olarak ayarlanmış bir AutoShape ekler
$aShape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 100, 100, 300, 300);
# Rectangle'a bir TextFrame ekler
$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!");
# TextFrame'in metin formatını alır
$format = $aShape->getTextFrame()->getTextFrameFormat();
# TextFrame içindeki sütun sayısını belirtir
$format->setColumnCount(3);
# Sütunlar arasındaki boşluğu belirtir
$format->setColumnSpacing(10);
# Sunumu kaydeder
$pres->save("ColumnCount.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Metin Çerçevesine Sütun Ekleme
Aspose.Slides for PHP via Java, metin çerçevelerine sütun eklemenizi sağlayan TextFrameFormat sınıfındaki setColumnCount yöntemini sunar. Bu özellik sayesinde bir metin çerçevesinde istediğiniz sütun sayısını belirtebilirsiniz.
Bu PHP kodu, bir metin çerçevesine sütun eklemeyi gösterir:
$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();
}
}
Metni Güncelleme
Aspose.Slides, bir metin kutusundaki ya da bir sunumdaki tüm metinlerde değişiklik yapmanıza ve güncellemenize olanak tanır.
Bu PHP kodu, bir sunumdaki tüm metinlerin nasıl güncellenip değiştirileceğini gösterir:
$pres = new Presentation("text.pptx");
try {
foreach($pres->getSlides() as $slide) {
foreach($slide->getShapes() as $shape) {
# Şeklin metin çerçevesini (IAutoShape) destekleyip desteklemediğini kontrol eder.
if (java_instanceof($shape, new JavaClass("com.aspose.slides.AutoShape"))) {
$autoShape = $shape;
# Metin çerçevesindeki paragraflar arasında döner
foreach($autoShape->getTextFrame()->getParagraphs() as $paragraph) {
# Paragraftaki her bölümü iterasyonla dolaşır
foreach($paragraph->getPortions() as $portion) {
$portion->setText($portion->getText()->replace("years", "months"));// Metni değiştirir
$portion->getPortionFormat()->setFontBold(NullableBool::True);// Formatlamayı değiştirir
}
}
}
}
}
# Değiştirilmiş sunumu kaydeder
$pres->save("text-changed.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Hipermetin Bağlantılı Bir Metin Kutusu Ekleme
Bir metin kutusunun içine bir bağlantı ekleyebilirsiniz. Metin kutusuna tıklandığında, kullanıcılar bağlantıyı açar.
Bir bağlantı içeren metin kutusu eklemek için şu adımları izleyin:
Presentationsınıfının bir örneğini oluşturun.- Yeni oluşturulan sunumdaki ilk slayt için bir referans alın.
- Slayt üzerinde belirtilen bir konumda
Rectangleolarak ayarlanmışShapeTypeile birAutoShapenesnesi ekleyin ve yeni eklenenAutoShapenesnesinin referansını alın. AutoShapenesnesine Aspose TextBox varsayılan metni içeren birTextFrameekleyin.HyperlinkManagersınıfının bir örneğini oluşturun.TextFrameiçinde istediğiniz bölüme setExternalHyperlinkClick yöntemiyle bir dış bağlantı atayın.- Son olarak,
Presentationnesnesi aracılığıyla PPTX dosyasını kaydedin.
Bu PHP kodu, bir slayta hipermetin bağlantılı bir metin kutusu eklemeyi gösterir:
# PPTX'i temsil eden bir Presentation sınıfının örneğini oluşturur
$pres = new Presentation();
try {
# Sunumdaki ilk slaytı alır
$slide = $pres->getSlides()->get_Item(0);
# Tipi Rectangle olarak ayarlanmış bir AutoShape nesnesi ekler
$shape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 150, 150, 150, 50);
# Şekli AutoShape'e dönüştürür
$pptxAutoShape = $shape;
# AutoShape ile ilişkili ITextFrame özelliğine erişir
$pptxAutoShape->addTextFrame("");
$textFrame = $pptxAutoShape->getTextFrame();
# Çerçeveye bir miktar metin ekler
$textFrame->getParagraphs()->get_Item(0)->getPortions()->get_Item(0)->setText("Aspose.Slides");
# Bölüm metni için Hipermetni ayarlar
$hyperlinkManager = $textFrame->getParagraphs()->get_Item(0)->getPortions()->get_Item(0)->getPortionFormat()->getHyperlinkManager();
$hyperlinkManager->setExternalHyperlinkClick("http://www.aspose.com");
# PPTX Sunumunu kaydeder
$pres->save("hLink_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
SSS
Ana slaytlarla çalışırken bir metin kutusu ile bir metin yer tutucusu arasındaki fark nedir?
Bir placeholder stil/konumu master dan miras alır ve layout larda geçersiz kılınabilir, oysa normal bir metin kutusu belirli bir slaytta bağımsız bir nesnedir ve layout değiştirildiğinde değişmez.
Sunumdaki metni toplu olarak değiştirmek isterken grafikleri, tabloları ve SmartArt içindeki metinlere dokunmadan nasıl gerçekleştiririm?
Metin çerçeveleri olan otomatik şekilleri iterasyonla ele alıp gömülü nesneleri (chart, table, SmartArt) dışarıda bırakın; bu nesnelerin koleksiyonlarını ayrı ayrı dolaşarak veya bu tip nesneleri atlayarak gerçekleştirebilirsiniz.