Terapkan atau Ubah Layout Slide di C++
Gambaran Umum
Layout slide mendefinisikan posisi dan pemformatan placeholder seperti judul, teks, gambar, diagram, dan tabel. Menerapkan layout memberikan slide struktur yang konsisten sekaligus memungkinkan setiap slide berisi kontennya sendiri.
Layout yang paling umum meliputi:
- Slide Judul: Berisi placeholder judul dan subjudul.
- Judul dan Konten: Berisi placeholder judul dan placeholder konten serbaguna.
- Kosong: Tidak berisi placeholder konten dan berguna ketika setiap bentuk akan diposisikan secara manual.
Memahami Pewarisan Layout
Sebuah presentasi memiliki tiga tingkat terkait:
- A slide master mendefinisikan tema, pemformatan bersama, latar belakang, dan objek umum.
- A layout slide termasuk dalam sebuah master dan mendefinisikan susunan placeholder tertentu.
- A normal slide menggunakan satu layout dan menyimpan konten yang dimasukkan untuk slide tersebut.
Sebuah normal slide mewarisi tema dan pemformatan dari layoutnya, dan layout mewarisi dari masternya. Nilai yang ditetapkan langsung pada slide normal akan menggantikan nilai yang diwariskan pada tingkat tersebut. Ketika sebuah normal slide dibuat, bentuk placeholder‑nya dihasilkan dari layout yang dipilih, sedangkan konten yang dimasukkan ke dalam placeholder tersebut menjadi milik slide normal.
Tambahkan placeholder yang diperlukan ke layout sebelum membuat slide darinya. Menambahkan placeholder lain ke layout kemudian tidak secara otomatis menambahkan bentuk placeholder yang bersesuaian ke slide normal yang sudah ada.
Hubungan ini memiliki dua konsekuensi penting:
- Mengubah pemformatan yang diwariskan atau geometri placeholder yang ada pada layout dapat memperbarui setiap slide yang bergantung padanya. Sebelum menyunting layout yang sudah digunakan, periksa slide‑slide yang bergantung dan tinjau presentasi yang dihasilkan.
- Layout yang masih digunakan oleh sebuah slide tidak dapat dihapus. Pindahkan slide‑slide yang bergantung ke layout lain terlebih dahulu, atau hapus hanya layout yang tidak digunakan.
Untuk info lebih lanjut tentang tingkat atas hierarki ini, lihat Slide Master.
Pilih dan Terapkan Layout Slide
Gunakan tipe layout ketika presentasi mengikuti definisi layout PowerPoint standar. Nama layout dapat diedit pengguna dan dapat dilokalisasi, sehingga pemilihan berdasarkan nama kurang dapat diandalkan kecuali Anda mengontrol templat sumber.
Contoh berikut mencari Judul dan Konten pada master pertama. Jika layout tersebut tidak tersedia, secara sengaja beralih ke Kosong. Pemeriksaan null kedua diperlukan karena presentasi dapat berisi hanya layout khusus. Layout yang dipilih kemudian diterapkan ke slide normal pertama melalui metode ISlide::set_LayoutSlide.
#include <DOM/ILayoutSlide.h>
#include <DOM/IMasterLayoutSlideCollection.h>
#include <DOM/IMasterSlide.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <DOM/SlideLayoutType.h>
#include <Export/SaveFormat.h>
#include <system/exceptions.h>
#include <system/smart_ptr.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
auto presentation = MakeObject<Presentation>(u"input.pptx");
auto layoutSlides = presentation->get_Master(0)->get_LayoutSlides();
auto targetLayout = layoutSlides->GetByType(SlideLayoutType::TitleAndObject);
if (targetLayout == nullptr)
{
targetLayout = layoutSlides->GetByType(SlideLayoutType::Blank);
}
if (targetLayout == nullptr)
{
throw InvalidOperationException(u"The first master does not contain a suitable layout slide.");
}
presentation->get_Slide(0)->set_LayoutSlide(targetLayout);
presentation->Save(u"output-with-new-layout.pptx", SaveFormat::Pptx);
presentation->Dispose();
Mengubah layout sebuah slide tidak menghapus bentuk biasa yang ditambahkan langsung ke slide. Namun, posisi placeholder, pemformatan yang diwariskan, dan korespondensi antara placeholder yang ada dengan layout baru dapat berubah, jadi periksa output ketika beralih antara layout yang sangat berbeda.
Tambahkan Layout Slide
Pemilihan dan pembuatan adalah operasi terpisah. Contoh sebelumnya memilih layout yang ada; ia tidak membuat yang baru. Untuk membuat layout, panggil metode IMasterLayoutSlideCollection::Add pada koleksi layout master target.
Contoh berikut selalu menambahkan layout Judul dan Konten baru bernama Report Title and Content, lalu menambahkan slide normal berdasarkan layout tersebut. Nama layout harus unik dalam koleksi.
#include <DOM/ILayoutSlide.h>
#include <DOM/IMasterLayoutSlideCollection.h>
#include <DOM/IMasterSlide.h>
#include <DOM/ISlideCollection.h>
#include <DOM/Presentation.h>
#include <DOM/SlideLayoutType.h>
#include <Export/SaveFormat.h>
#include <system/smart_ptr.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
auto presentation = MakeObject<Presentation>(u"input.pptx");
auto masterSlide = presentation->get_Master(0);
auto reportLayout = masterSlide->get_LayoutSlides()->Add(SlideLayoutType::TitleAndObject, u"Report Title and Content");
presentation->get_Slides()->AddEmptySlide(reportLayout);
presentation->Save(u"output-with-report-layout.pptx", SaveFormat::Pptx);
presentation->Dispose();
Tambahkan layout hanya ketika templat memang membutuhkan struktur dapat dipakai ulang lainnya. Jika layout yang cocok sudah ada, pilih dan gunakan kembali alih‑alih membuat duplikat.
Tambahkan Placeholder ke Layout Slide
Metode ILayoutSlide::get_PlaceholderManager menyediakan sebuah ILayoutPlaceholderManager untuk menambahkan bentuk placeholder ke layout.
Contoh berikut memverifikasi bahwa layout Kosong ada, menambahkan empat placeholder ke dalamnya, lalu membuat slide normal yang menggunakan layout yang dimodifikasi. Urutan dibuat sengaja: placeholder ditambahkan sebelum slide normal dibuat, sehingga Aspose.Slides dapat menghasilkan bentuk placeholder yang bersesuaian pada slide tersebut.
#include <DOM/IGlobalLayoutSlideCollection.h>
#include <DOM/ILayoutPlaceholderManager.h>
#include <DOM/ILayoutSlide.h>
#include <DOM/ISlideCollection.h>
#include <DOM/Presentation.h>
#include <DOM/SlideLayoutType.h>
#include <Export/SaveFormat.h>
#include <system/exceptions.h>
#include <system/smart_ptr.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
auto presentation = MakeObject<Presentation>();
auto blankLayout = presentation->get_LayoutSlides()->GetByType(SlideLayoutType::Blank);
if (blankLayout == nullptr)
{
throw InvalidOperationException(u"The presentation does not contain a Blank layout slide.");
}
auto placeholderManager = blankLayout->get_PlaceholderManager();
placeholderManager->AddContentPlaceholder(20.0f, 20.0f, 310.0f, 270.0f);
placeholderManager->AddVerticalTextPlaceholder(350.0f, 20.0f, 350.0f, 270.0f);
placeholderManager->AddChartPlaceholder(20.0f, 310.0f, 310.0f, 180.0f);
placeholderManager->AddTablePlaceholder(350.0f, 310.0f, 350.0f, 180.0f);
presentation->get_Slides()->AddEmptySlide(blankLayout);
presentation->Save(u"output-with-placeholders.pptx", SaveFormat::Pptx);
presentation->Dispose();
Hasil:

Peringatan
Mengubah pemformatan yang diwariskan atau geometri placeholder layout yang ada dapat memengaruhi slide‑slide yang bergantung. Placeholder layout yang baru ditambahkan tidak secara otomatis ditambahkan ke slide normal yang sudah ada. Uji perubahan layout pada salinan presentasi dan periksa setiap slide yang bergantung.Hapus Layout Slide yang Tidak Digunakan
Gunakan metode Compress::RemoveUnusedLayoutSlides untuk menghapus layout yang tidak direferensikan oleh slide normal mana pun. Metode ini membiarkan layout yang masih dipakai tetap utuh.
#include <DOM/Presentation.h>
#include <Export/SaveFormat.h>
#include <LowCode/Compress.h>
#include <system/smart_ptr.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace Aspose::Slides::LowCode;
using namespace System;
auto presentation = MakeObject<Presentation>(u"input.pptx");
Compress::RemoveUnusedLayoutSlides(presentation);
presentation->Save(u"output-without-unused-layouts.pptx", SaveFormat::Pptx);
presentation->Dispose();
Untuk menghapus satu layout tertentu, pertama gunakan metode get_HasDependingSlides atau GetDependingSlides. Pindahkan slide‑slide yang bergantung sebelum memanggil ILayoutSlide::Remove. Mencoba menghapus layout yang masih digunakan akan menghasilkan PptxEditException.
Kontrol Visibilitas Footer pada Layout Slide
Sebuah layout memiliki footer, nomor slide, dan placeholder tanggal‑waktu miliknya sendiri. Gunakan metode ILayoutSlide::get_HeaderFooterManager untuk mengontrol placeholder‑placeholder tersebut pada satu layout. Ini berguna ketika, misalnya, layout konten harus menampilkan footer tetapi layout judul tidak.
#include <DOM/IGlobalLayoutSlideCollection.h>
#include <DOM/ILayoutSlide.h>
#include <DOM/ILayoutSlideHeaderFooterManager.h>
#include <DOM/Presentation.h>
#include <DOM/SlideLayoutType.h>
#include <Export/SaveFormat.h>
#include <system/exceptions.h>
#include <system/smart_ptr.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
auto presentation = MakeObject<Presentation>(u"input.pptx");
auto layoutSlide = presentation->get_LayoutSlides()->GetByType(SlideLayoutType::TitleAndObject);
if (layoutSlide == nullptr)
{
layoutSlide = presentation->get_LayoutSlides()->GetByType(SlideLayoutType::Blank);
}
if (layoutSlide == nullptr)
{
throw InvalidOperationException(u"The presentation does not contain a suitable layout slide.");
}
auto headerFooterManager = layoutSlide->get_HeaderFooterManager();
headerFooterManager->SetFooterVisibility(true);
headerFooterManager->SetSlideNumberVisibility(true);
headerFooterManager->SetDateTimeVisibility(true);
headerFooterManager->SetFooterText(u"Footer text");
headerFooterManager->SetDateTimeText(u"Date and time text");
presentation->Save(u"output-with-layout-footers.pptx", SaveFormat::Pptx);
presentation->Dispose();
Kontrol Visibilitas Footer pada Master dan Layout Anak-nya
Untuk menerapkan pengaturan footer yang konsisten di seluruh hierarki master, gunakan metode IMasterSlide::get_HeaderFooterManager. Metode propagasi dari IMasterSlideHeaderFooterManager beroperasi pada master serta layout slide dan slide normal yang bergantung; mereka tidak menargetkan hanya satu slide normal.
#include <DOM/IMasterSlide.h>
#include <DOM/IMasterSlideHeaderFooterManager.h>
#include <DOM/Presentation.h>
#include <Export/SaveFormat.h>
#include <system/smart_ptr.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
auto presentation = MakeObject<Presentation>(u"input.pptx");
auto headerFooterManager = presentation->get_Master(0)->get_HeaderFooterManager();
headerFooterManager->SetFooterAndChildFootersVisibility(true);
headerFooterManager->SetSlideNumberAndChildSlideNumbersVisibility(true);
headerFooterManager->SetDateTimeAndChildDateTimesVisibility(true);
headerFooterManager->SetFooterAndChildFootersText(u"Footer text");
headerFooterManager->SetDateTimeAndChildDateTimesText(u"Date and time text");
presentation->Save(u"output-with-master-footers.pptx", SaveFormat::Pptx);
presentation->Dispose();
FAQ
Apa Perbedaan antara Slide Master dan Layout Slide?
Slide master mendefinisikan tema dan pemformatan bersama untuk seluruh presentasi. Layout slide termasuk dalam master dan mendefinisikan satu susunan placeholder yang dapat dipakai ulang. Slide normal menggunakan layout tersebut dan menyimpan konten khusus slide.
Bisakah Saya Menyalin Layout Slide dari Satu Presentasi ke Presentasi Lain?
Ya. Tambahkan salinan ke koleksi tujuan dengan metode IGlobalLayoutSlideCollection::AddClone. Saat menyalin antar presentasi, pastikan juga memeriksa font, tema, gambar, dan sumber daya lain yang digunakan oleh layout sumber.
Apa yang Terjadi Ketika Saya Memodifikasi Layout yang Sudah Digunakan?
Slide‑slide yang bergantung mewarisi perubahan layout kecuali mereka menimpa pemformatan atau objek yang terpengaruh secara lokal. Geometri placeholder dan gaya yang diwariskan dapat berubah pada banyak slide sekaligus. Gunakan GetDependingSlides untuk mengidentifikasi slide yang terpengaruh sebelum menyunting layout.
Apa yang Terjadi Jika Saya Menghapus Layout yang Masih Digunakan?
Aspose.Slides akan melempar PptxEditException. Pindahkan slide‑slide yang bergantung terlebih dahulu, atau gunakan RemoveUnusedLayoutSlides untuk menghapus hanya layout yang tidak direferensikan.









