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.

Bir Slayta Metin Kutusu Oluşturma

Bir slayta metin kutusu oluşturmak için şu adımları izleyin:

  1. Presentation sınıfının bir örneğini oluşturun.
  2. Yeni oluşturulan sunumdaki ilk slayt için bir referans alın.
  3. Slayt üzerinde belirtilen bir konumda Rectangle olarak ayarlanmış şekil türü ile bir AutoShape nesnesi ekleyin ve yeni eklenen AutoShape nesnesinin referansını alın.
  4. AutoShape nesnesine bir TextFrame ekleyin; bu çerçeve metin içerecektir. Aşağıdaki örnekte, Aspose TextBox metni eklendi.
  5. Son olarak, Presentation nesnesi 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.

Text box and shape

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:

  1. Presentation sınıfının bir örneğini oluşturun.
  2. Yeni oluşturulan sunumdaki ilk slayt için bir referans alın.
  3. Slayt üzerinde belirtilen bir konumda Rectangle olarak ayarlanmış ShapeType ile bir AutoShape nesnesi ekleyin ve yeni eklenen AutoShape nesnesinin referansını alın.
  4. AutoShape nesnesine Aspose TextBox varsayılan metni içeren bir TextFrame ekleyin.
  5. HyperlinkManager sınıfının bir örneğini oluşturun.
  6. TextFrame içinde istediğiniz bölüme setExternalHyperlinkClick yöntemiyle bir dış bağlantı atayın.
  7. Son olarak, Presentation nesnesi 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.