Kelola Bentuk Presentasi di PHP

Ringkasan

Artikel ini menjelaskan cara bekerja dengan bentuk pada presentasi menggunakan Aspose.Slides. Ini menunjukkan cara menemukan bentuk pada slide, mengklonnya, menghapusnya, menyembunyikannya, mengubah urutannya, mendapatkan ID bentuk Interop, dan menetapkan teks alternatif untuk identifikasi serta pemrosesan lebih lanjut.

Artikel ini juga membahas cara mengakses format tata letak untuk bentuk, merender bentuk sebagai SVG, menyelaraskan bentuk pada slide, dan menggunakan properti flip untuk pencerminan horizontal dan vertikal. Selain itu, artikel ini menyertakan FAQ singkat tentang penggabungan bentuk, urutan tumpukan, dan penguncian bentuk.

Temukan Bentuk pada Slide

Topik ini akan menjelaskan teknik sederhana untuk memudahkan pengembang menemukan bentuk tertentu pada slide tanpa menggunakan Id internalnya. Penting untuk diketahui bahwa file Presentasi PowerPoint tidak memiliki cara lain untuk mengidentifikasi bentuk pada slide selain Id unik internal. Bagi pengembang, menemukan bentuk menggunakan Id unik internal dapat menjadi sulit. Semua bentuk yang ditambahkan ke slide memiliki beberapa Teks Alternatif. Kami menyarankan pengembang untuk menggunakan teks alternatif untuk menemukan bentuk tertentu. Anda dapat menggunakan MS PowerPoint untuk menentukan teks alternatif untuk objek yang akan Anda ubah di masa mendatang.

Setelah menetapkan teks alternatif pada bentuk yang diinginkan, Anda dapat membuka presentasi tersebut menggunakan Aspose.Slides for PHP via Java dan mengiterasi semua bentuk yang ditambahkan ke slide. Pada setiap iterasi, Anda dapat memeriksa teks alternatif bentuk tersebut dan bentuk dengan teks alternatif yang cocok akan menjadi bentuk yang Anda butuhkan. Untuk mendemonstrasikan teknik ini dengan lebih baik, kami telah membuat metode findShape yang melakukan pencarian bentuk spesifik pada slide dan mengembalikan bentuk tersebut.

  # Membuat instance kelas Presentation yang mewakili file presentasi
  $pres = new Presentation("FindingShapeInSlide.pptx");
  try {
    $slide = $pres->getSlides()->get_Item(0);
    # Teks alternatif bentuk yang akan dicari
    $shape = findShape($slide, "Shape1");
    if (!java_is_null($shape)) {
      echo("Shape Name: " . $shape->getName());
    }
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Klon Bentuk

Untuk mengklon bentuk ke slide menggunakan Aspose.Slides for PHP via Java:

  1. Buat instance kelas Presentation.
  2. Dapatkan referensi slide dengan menggunakan indeksnya.
  3. Akses koleksi bentuk slide sumber.
  4. Tambahkan slide baru ke presentasi.
  5. Klon bentuk dari koleksi bentuk slide sumber ke slide baru.
  6. Simpan presentasi yang telah diubah sebagai file PPTX.

Contoh di bawah menambahkan bentuk grup ke slide.

  # Membuat instance kelas Presentation
  $pres = new Presentation("Source Frame.pptx");
  try {
    $sourceShapes = $pres->getSlides()->get_Item(0)->getShapes();
    $blankLayout = $pres->getMasters()->get_Item(0)->getLayoutSlides()->getByType(SlideLayoutType::Blank);
    $destSlide = $pres->getSlides()->addEmptySlide($blankLayout);
    $destShapes = $destSlide->getShapes();
    $destShapes->addClone($sourceShapes->get_Item(1), 50, 150 + $sourceShapes->get_Item(0)->getHeight());
    $destShapes->addClone($sourceShapes->get_Item(2));
    $destShapes->insertClone(0, $sourceShapes->get_Item(0), 50, 150);
    # Menyimpan file PPTX ke disk
    $pres->save("CloneShape_out.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Hapus Bentuk

Aspose.Slides for PHP via Java memungkinkan pengembang menghapus bentuk apa pun. Untuk menghapus bentuk dari slide mana pun, ikuti langkah‑langkah berikut:

  1. Buat instance kelas Presentation.
  2. Akses slide pertama.
  3. Temukan bentuk dengan AlternativeText tertentu.
  4. Hapus bentuk.
  5. Simpan file ke disk.
  # Buat objek Presentation
  $pres = new Presentation();
  try {
    # Dapatkan slide pertama
    $sld = $pres->getSlides()->get_Item(0);
    # Tambahkan autoshape tipe persegi panjang
    $sld->getShapes()->addAutoShape(ShapeType::Rectangle, 50, 40, 150, 50);
    $sld->getShapes()->addAutoShape(ShapeType::Moon, 160, 40, 150, 50);
    $altText = "User Defined";
    $iCount = $sld->getShapes()->size();
    for($i = 0; $i < java_values($iCount) ; $i++) {
      $ashp = $sld->getShapes()->get_Item(0);
      if ($alttext->equals($ashp->getAlternativeText())) {
        $sld->getShapes()->remove($ashp);
      }
    }
    # Simpan presentasi ke disk
    $pres->save("RemoveShape_out.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Sembunyikan Bentuk

Aspose.Slides for PHP via Java memungkinkan pengembang menyembunyikan bentuk apa pun. Untuk menyembunyikan bentuk dari slide mana pun, ikuti langkah‑langkah berikut:

  1. Buat instance kelas Presentation.
  2. Akses slide pertama.
  3. Temukan bentuk dengan AlternativeText tertentu.
  4. Sembunyikan bentuk.
  5. Simpan file ke disk.
  # Instansiasi kelas Presentation yang mewakili PPTX
  $pres = new Presentation();
  try {
    # Dapatkan slide pertama
    $sld = $pres->getSlides()->get_Item(0);
    # Tambahkan autoshape tipe persegi panjang
    $sld->getShapes()->addAutoShape(ShapeType::Rectangle, 50, 40, 150, 50);
    $sld->getShapes()->addAutoShape(ShapeType::Moon, 160, 40, 150, 50);
    $alttext = "User Defined";
    $iCount = $sld->getShapes()->size();
    for($i = 0; $i < java_values($iCount) ; $i++) {
      $ashp = $sld->getShapes()->get_Item($i);
      if ($alttext->equals($ashp->getAlternativeText())) {
        $ashp->setHidden(true);
      }
    }
    # Simpan presentasi ke disk
    $pres->save("Hiding_Shapes_out.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Ubah Urutan Bentuk

Aspose.Slides for PHP via Java memungkinkan pengembang mengubah urutan bentuk. Mengubah urutan bentuk menentukan bentuk mana yang berada di depan atau di belakang. Untuk mengubah urutan bentuk pada slide, ikuti langkah‑langkah berikut:

  1. Buat instance kelas Presentation.
  2. Akses slide pertama.
  3. Tambahkan sebuah bentuk.
  4. Tambahkan beberapa teks dalam frame teks bentuk.
  5. Tambahkan bentuk lain dengan koordinat yang sama.
  6. Ubah urutan bentuk.
  7. Simpan file ke disk.
  $pres = new Presentation("ChangeShapeOrder.pptx");
  try {
    $slide = $pres->getSlides()->get_Item(0);
    $shp3 = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 200, 365, 400, 150);
    $shp3->getFillFormat()->setFillType(FillType::NoFill);
    $shp3->addTextFrame(" ");
    $para = $shp3->getTextFrame()->getParagraphs()->get_Item(0);
    $portion = $para->getPortions()->get_Item(0);
    $portion->setText("Watermark Text Watermark Text Watermark Text");
    $shp3 = $slide->getShapes()->addAutoShape(ShapeType::Triangle, 200, 365, 400, 150);
    $slide->getShapes()->reorder(2, $shp3);
    $pres->save("Reshape_out.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Dapatkan ID Bentuk Interop

Aspose.Slides for PHP via Java memungkinkan pengembang mendapatkan pengidentifikasi bentuk unik dalam ruang lingkup slide, berbeda dengan metode getUniqueId yang memberikan pengidentifikasi unik dalam ruang lingkup presentasi. Metode getOfficeInteropShapeId telah ditambahkan ke kelas Shape. Nilai yang dikembalikan oleh metode getOfficeInteropShapeId sesuai dengan nilai Id dari objek Microsoft.Office.Interop.PowerPoint.Shape. Di bawah ini contoh kode yang diberikan.

  $pres = new Presentation("Presentation.pptx");
  try {
    # Mendapatkan pengidentifikasi bentuk unik dalam ruang lingkup slide
    $officeInteropShapeId = $pres->getSlides()->get_Item(0)->getShapes()->get_Item(0)->getOfficeInteropShapeId();
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Setel Teks Alternatif untuk Bentuk

Aspose.Slides for PHP via Java memungkinkan pengembang mengatur AlternateText pada bentuk apa pun. Bentuk dalam presentasi dapat dibedakan dengan Alternative Text atau metode Shape Name. Metode setAlternativeText dan getAlternativeText dapat dibaca atau diatur menggunakan Aspose.Slides maupun Microsoft PowerPoint. Dengan menggunakan metode ini, Anda dapat menandai sebuah bentuk dan melakukan operasi berbeda seperti Menghapus bentuk, Menyembunyikan bentuk, atau Mengubah urutan bentuk pada slide. Untuk mengatur AlternateText sebuah bentuk, ikuti langkah‑langkah berikut:

  1. Buat instance kelas Presentation.
  2. Akses slide pertama.
  3. Tambahkan bentuk apa pun ke slide.
  4. Lakukan beberapa pekerjaan dengan bentuk yang baru ditambahkan.
  5. Telusuri bentuk‑bentuk untuk menemukan bentuk yang diinginkan.
  6. Atur AlternativeText.
  7. Simpan file ke disk.
  # Membuat instance kelas Presentation yang mewakili PPTX
  $pres = new Presentation();
  try {
    # Dapatkan slide pertama
    $sld = $pres->getSlides()->get_Item(0);
    # Tambahkan autoshape tipe persegi panjang
    $shp1 = $sld->getShapes()->addAutoShape(ShapeType::Rectangle, 50, 40, 150, 50);
    $shp2 = $sld->getShapes()->addAutoShape(ShapeType::Moon, 160, 40, 150, 50);
    $shp2->getFillFormat()->setFillType(FillType::Solid);
    $shp2->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->GRAY);
    for($i = 0; $i < java_values($sld->getShapes()->size()) ; $i++) {
      $shape = $sld->getShapes()->get_Item($i);
      if (!java_is_null($shape)) {
        $shape->setAlternativeText("User Defined");
      }
    }
    # Simpan presentasi ke disk
    $pres->save("Set_AlternativeText_out.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Akses Format Tata Letak untuk Bentuk

Aspose.Slides for PHP via Java menyediakan API sederhana untuk mengakses format tata letak sebuah bentuk. Artikel ini menunjukkan cara mengakses format tata letak.

Contoh kode di bawah diberikan.

  $pres = new Presentation("pres.pptx");
  try {
    foreach($pres->getLayoutSlides() as $layoutSlide) {
      foreach($layoutSlide->getShapes() as $shape) {
        $fillFormats = $shape->getFillFormat();
        $lineFormats = $shape->getLineFormat();
      }
    }
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Render Bentuk sebagai SVG

Sekarang Aspose.Slides for PHP via Java mendukung render bentuk sebagai SVG. Metode writeAsSvg (beserta overload‑nya) telah ditambahkan ke kelas Shape. Metode ini memungkinkan menyimpan konten bentuk sebagai file SVG. Potongan kode di bawah menunjukkan cara mengekspor bentuk slide ke file SVG.

  $pres = new Presentation("TestExportShapeToSvg.pptx");
  try {
    $stream = new Java("java.io.FileOutputStream", "SingleShape.svg");
    try {
      $pres->getSlides()->get_Item(0)->getShapes()->get_Item(0)->writeAsSvg($stream);
    } finally {
      if (!java_is_null($stream)) {
        $stream->close();
      }
    }
  } catch (JavaException $e) {
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Selaraskan Bentuk

Aspose.Slides memungkinkan menyelaraskan bentuk baik relatif terhadap margin slide maupun relatif terhadap satu sama lain. Untuk tujuan ini, metode berlebih SlidesUtil::alignShapes telah ditambahkan. Enumerasi ShapesAlignmentType mendefinisikan opsi penyelarasan yang tersedia.

Contoh 1

Kode sumber di bawah menyelaraskan bentuk dengan indeks 1, 2, dan 4 sepanjang batas atas slide.

  $pres = new Presentation("example.pptx");
  try {
    $slide = $pres->getSlides()->get_Item(0);
    $shape1 = $slide->getShapes()->get_Item(1);
    $shape2 = $slide->getShapes()->get_Item(2);
    $shape3 = $slide->getShapes()->get_Item(4);
    SlideUtil->alignShapes(ShapesAlignmentType::AlignTop, true, $pres->getSlides()->get_Item(0), array($slide->getShapes()->indexOf($shape1), $slide->getShapes()->indexOf($shape2), $slide->getShapes()->indexOf($shape3) ));
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Contoh 2

Contoh di bawah menunjukkan cara menyelaraskan seluruh koleksi bentuk relatif terhadap bentuk paling bawah dalam koleksi.

  $pres = new Presentation("example.pptx");
  try {
    SlideUtil->alignShapes(ShapesAlignmentType::AlignBottom, false, $pres->getSlides()->get_Item(0));
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Properti Flip

Di Aspose.Slides, kelas ShapeFrame menyediakan kontrol atas pencerminan horizontal dan vertikal bentuk melalui properti flipH dan flipV. Kedua properti bertipe NullableBool, memungkinkan nilai True untuk mencerminkan, False untuk tidak mencerminkan, atau NotDefined untuk menggunakan perilaku bawaan. Nilai‑nilai ini dapat diakses dari Frame sebuah bentuk.

Untuk mengubah pengaturan flip, sebuah instance baru ShapeFrame dibangun dengan posisi dan ukuran saat ini, nilai yang diinginkan untuk flipH dan flipV, serta sudut rotasi. Menetapkan instance ini ke Frame bentuk dan menyimpan presentasi akan menerapkan transformasi cermin dan menyimpannya ke file output.

Misalkan kita memiliki file sample.pptx di mana slide pertama berisi satu bentuk dengan pengaturan flip default, seperti yang ditunjukkan di bawah.

Bentuk yang akan diputar

Contoh kode berikut mengambil properti flip bentuk saat ini dan memutarannya baik secara horizontal maupun vertikal.

$presentation = new Presentation("sample.pptx");
try {
    $slide = $presentation->getSlides()->get_Item(0);
    $shape = $slide->getShapes()->get_Item(0);

    // Mengambil properti flip horizontal dari bentuk.
    $horizontalFlip = $shape->getFrame()->getFlipH();
    echo "Horizontal flip: ", $horizontalFlip, "\n";

    // Mengambil properti flip vertikal dari bentuk.
    $verticalFlip = $shape->getFrame()->getFlipV();
    echo "Vertical flip: ", $verticalFlip, "\n";

    $x = $shape->getFrame()->getX();
    $y = $shape->getFrame()->getY();
    $width = $shape->getFrame()->getWidth();
    $height = $shape->getFrame()->getHeight();
    $flipH = NullableBool::True; // Balik secara horizontal.
    $flipV = NullableBool::True; // Balik secara horizontal.
    $rotation = $shape->getFrame()->getRotation();

    $shape->setFrame(new ShapeFrame($x, $y, $width, $height, $flipH, $flipV, $rotation));

    $presentation->save("output.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

Hasilnya:

Bentuk yang diputar

FAQ

Apakah saya dapat menggabungkan bentuk (union/intersect/subtract) pada slide seperti di editor desktop?

Tidak ada API operasi Boolean bawaan. Anda dapat memperkirakannya dengan membangun kontur yang diinginkan secara manual—misalnya, menghitung geometri hasil (via GeometryPath) dan membuat bentuk baru dengan kontur tersebut, serta opsional menghapus bentuk asli.

Bagaimana cara mengontrol urutan tumpukan (z-order) sehingga sebuah bentuk selalu berada di atas?

Ubah urutan penyisipan/perpindahan dalam koleksi shapes slide. Untuk hasil yang dapat diprediksi, selesaikan urutan z setelah semua modifikasi slide lainnya.

Bisakah saya “mengunci” sebuah bentuk agar pengguna tidak dapat mengeditnya di PowerPoint?

Ya. Tetapkan flag proteksi pada tingkat bentuk (misalnya, kunci pemilihan, pergerakan, perubahan ukuran, atau edit teks). Jika diperlukan, terapkan pembatasan serupa pada master atau tata letak. Perlu diingat bahwa ini adalah proteksi level UI, bukan fitur keamanan; untuk perlindungan yang lebih kuat, kombinasikan dengan pembatasan tingkat file seperti rekomendasi baca‑saja atau kata sandi (read‑only recommendations or passwords).