ปรับใช้หรือเปลี่ยนแปลงเค้าโครงสไลด์ใน C++
ภาพรวม
โครงร่างสไลด์กำหนดตำแหน่งและรูปแบบของตัวแสดงตำแหน่ง (placeholder) เช่น ชื่อสไลด์, ข้อความ, รูปภาพ, แผนภูมิ และตาราง การใช้โครงร่างทำให้สไลด์มีโครงสร้างสอดคล้องกันในขณะที่แต่ละสไลด์ยังคงมีเนื้อหาของตนเอง
โครงร่างที่พบมากที่สุด ได้แก่:
- สไลด์หัวเรื่อง: มีตัวแสดงตำแหน่งหัวเรื่องและหัวเรื่องย่อย
- หัวเรื่องและเนื้อหา: มีตัวแสดงตำแหน่งหัวเรื่องและตัวแสดงตำแหน่งเนื้อหาทั่วไป
- เปล่า: ไม่มีตัวแสดงตำแหน่งใด ๆ และเหมาะกับกรณีที่ต้องกำหนดรูปทรงทุกชิ้นด้วยตนเอง
ทำความเข้าใจการสืบทอดโครงร่าง
การนำเสนอมีระดับที่เกี่ยวข้องกันสามระดับ:
- A สไลด์หลัก กำหนดธีม, รูปแบบที่ใช้ร่วมกัน, พื้นหลังและออบเจกต์ทั่วไป
- A สไลด์โครงร่าง อยู่ภายใต้สไลด์หลักและกำหนดการจัดวางตัวแสดงตำแหน่งในรูปแบบเฉพาะ
- A สไลด์ปกติ ใช้โครงร่างหนึ่งโครงร่างและเก็บเนื้อหาที่ป้อนไว้สำหรับสไลด์นั้น
สไลด์ปกติสืบทอดธีมและรูปแบบจากโครงร่างของมัน, และโครงร่างสืบทอดจากสไลด์หลัก ค่าที่ตั้งโดยตรงบนสไลด์ปกติจะเขียนทับค่าที่สืบทอดมาที่ระดับนั้น เมื่อสร้างสไลด์ปกติ ตัวรูปร่าง placeholder จะถูกสร้างจากโครงร่างที่เลือก, ส่วนเนื้อหาที่ป้อนเข้า placeholder จะเป็นของสไลด์ปกติ
เพิ่ม placeholder ที่จำเป็นในโครงร่างก่อนสร้างสไลด์จากโครงร่างนั้น การเพิ่ม placeholder อีกตัวในโครงร่างภายหลังจะไม่ทำให้รูปร่าง placeholder ที่สอดคล้องกันถูกเพิ่มอัตโนมัติในสไลด์ปกติที่มีอยู่แล้ว
ความสัมพันธ์นี้มีผลสำคัญสองประการ:
- การเปลี่ยนรูปแบบที่สืบทอดหรือรูปทรงของ placeholder ที่มีอยู่ในโครงร่างสามารถอัปเดตสไลด์ทุกสไลด์ที่อิงอยู่ได้ ก่อนแก้ไขโครงร่างที่กำลังใช้งาน ให้ตรวจสอบสไลด์ที่ขึ้นกับมันและทบทวนผลลัพธ์ของการนำเสนอ
- โครงร่างที่ยังคงถูกสไลด์อ้างอิงไม่สามารถลบได้ ให้เปลี่ยนสไลด์ที่ขึ้นกับโครงร่างนั้นไปใช้โครงร่างอื่นก่อน, หรือเพียงลบโครงร่างที่ไม่มีการใช้งานเท่านั้น
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับระดับบนสุดของลำดับชั้นนี้ ดูที่ มาสเตอร์สไลด์
หากต้องการซ่อนโลโก้หรือกราฟิกมาสเตอร์ที่สืบทอดบนสไลด์หนึ่งหรือผ่านโครงร่างที่ใช้ร่วมกัน ดูที่ ควบคุมการแสดงผลกราฟิกมาสเตอร์ ตัวอย่างเปรียบเทียบสไลด์สองสไลด์ที่ใช้มาสเตอร์เดียวกัน
เลือกและใช้โครงร่างสไลด์
ใช้ประเภทโครงร่างเมื่อการนำเสนอปฏิบัติตามคำนิยามโครงร่าง PowerPoint มาตรฐาน ชื่อโครงร่างสามารถแก้ไขโดยผู้ใช้และแปลเป็นภาษาต่าง ๆ ได้ ดังนั้นการเลือกตามชื่อจึงน้อยกว่าความน่าเชื่อถือ เว้นแต่คุณควบคุมเทมเพลตต้นฉบับ
ตัวอย่างต่อไปนี้ค้นหา หัวเรื่องและเนื้อหา บนมาสเตอร์แรก หากโครงร่างนั้นไม่มีอยู่ จะย้อนกลับไปใช้ เปล่า อย่างตั้งใจ การตรวจสอบค่าว่างที่สองจำเป็นเนื่องจากการนำเสนออาจมีเพียงโครงร่างแบบกำหนดเองเท่านั้น โครงร่างที่เลือกจะถูกนำไปใช้กับสไลด์ปกติแรกผ่านเมธอด 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();
การเปลี่ยนโครงร่างของสไลด์ไม่ได้ลบรูปร่างปกติที่เพิ่มเข้ามาโดยตรงบนสไลด์ อย่างไรก็ตามตำแหน่งของ placeholder, รูปแบบที่สืบทอด, และความสอดคล้องระหว่าง placeholder ที่มีอยู่กับโครงร่างใหม่อาจเปลี่ยนแปลงได้ ดังนั้นควรตรวจสอบผลลัพธ์เมื่อสลับระหว่างโครงร่างที่แตกต่างอย่างมาก
เพิ่มสไลด์โครงร่าง
การเลือกและการสร้างเป็นขั้นตอนที่แยกจากกัน ตัวอย่างก่อนหน้าเลือกโครงร่างที่มีอยู่; ไม่ได้สร้างใหม่ เพื่อสร้างโครงร่างให้เรียกเมธอด IMasterLayoutSlideCollection::Add บนคอลเลกชันโครงร่างของมาสเตอร์เป้าหมาย
ตัวอย่างต่อไปนี้จะเพิ่มโครงร่าง หัวเรื่องและเนื้อหา ใหม่ชื่อ Report Title and Content เสมอ, แล้วเพิ่มสไลด์ปกติที่อิงจากโครงร่างนั้น ชื่อโครงร่างต้องไม่ซ้ำกันภายในคอลเลกชัน
#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();
เพิ่มโครงร่างเฉพาะเมื่อเทมเพลตต้องการโครงสร้างที่นำกลับมาใช้ใหม่ หากมีโครงร่างที่เหมาะสมแล้ว ให้เลือกและใช้ซ้ำแทนการสร้างโครงร่างซ้ำ
เพิ่ม Placeholder ไปยังสไลด์โครงร่าง
เมธอด ILayoutSlide::get_PlaceholderManager ให้ ILayoutPlaceholderManager สำหรับเพิ่มรูปร่าง placeholder ไปยังโครงร่าง
ตัวอย่างต่อไปนี้ตรวจสอบว่าโครงร่าง เปล่า มีอยู่, เพิ่ม placeholder สี่รายการลงในโครงร่างนั้น, แล้วสร้างสไลด์ปกติที่ใช้โครงร่างที่แก้ไขแล้ว ลำดับมีจุดมุ่งหมาย: เพิ่ม placeholder ก่อนสร้างสไลด์ปกติ เพื่อให้ Aspose.Slides สามารถสร้างรูปร่าง placeholder ที่สอดคล้องบนสไลด์นั้นได้
#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();
ผลลัพธ์:

Warning
การเปลี่ยนรูปแบบที่สืบทอดหรือรูปทรงของ placeholder ที่มีอยู่ในโครงร่างอาจส่งผลต่อสไลด์ที่อิงอยู่ Placeholder ที่เพิ่มใหม่จะไม่ถูกเติมกลับในสไลด์ปกติที่มีอยู่แล้ว ทดสอบการเปลี่ยนแปลงโครงร่างบนสำเนาของการนำเสนอและตรวจสอบสไลด์ที่อิงทุกสไลด์ลบสไลด์โครงร่างที่ไม่ได้ใช้
ใช้เมธอด Compress::RemoveUnusedLayoutSlides เพื่อลบโครงร่างที่ไม่มีสไลด์ปกติอ้างอิง เมธอดจะทิ้งโครงร่างที่ยังคงถูกใช้งานไว้เดิม
#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();
เพื่อเอาโครงร่างเฉพาะหนึ่งออก, ก่อนอื่นให้ใช้เมธอด get_HasDependingSlides หรือ GetDependingSlides เพื่อตรวจสอบสไลด์ที่อิงอยู่ แล้วเปลี่ยนสไลด์ที่อิงก่อนเรียก ILayoutSlide::Remove การพยายามลบโครงร่างที่กำลังใช้งานจะทำให้เกิดข้อยกเว้น PptxEditException
ควบคุมการมองเห็นส่วนท้ายบนสไลด์โครงร่าง
โครงร่างมีส่วนท้ายของตนเอง, placeholder หมายเลขสไลด์และวันเวลา ใช้เมธอด ILayoutSlide::get_HeaderFooterManager เพื่อควบคุม placeholder เหล่านั้นสำหรับโครงร่างหนึ่ง ตัวเลือกนี้เป็นประโยชน์เมื่อเช่น โครงร่างเนื้อหาควรแสดงส่วนท้ายแต่โครงร่างหัวเรื่องไม่ควรแสดง
ตัวอย่างต่อไปนี้เลือกโครงร่างอย่างปลอดภัยและทำให้ส่วนท้ายของมันมองเห็นได้:
#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();
ควบคุมการมองเห็นส่วนท้ายบนมาสเตอร์และโครงร่างลูกของมัน
เพื่อกำหนดค่าการแสดงส่วนท้ายให้สอดคล้องกันทั่วทั้งลำดับชั้นมาสเตอร์, ใช้เมธอด IMasterSlide::get_HeaderFooterManager วิธีการกระจายของ IMasterSlideHeaderFooterManager จะทำงานบนมาสเตอร์และโครงร่างที่ขึ้นกับมันรวมถึงสไลด์ปกติ; ไม่ได้มุ่งเป้าไปที่สไลด์ปกติเพียงสไลด์เดียว
#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();
คำถามที่พบบ่อย
ความแตกต่างระหว่างสไลด์มาสเตอร์และสไลด์โครงร่างคืออะไร?
สไลด์มาสเตอร์กำหนดธีมและรูปแบบที่แชร์ของการนำเสนอ สไลด์โครงร่างเป็นส่วนของมาสเตอร์และกำหนดการจัดวาง placeholder ที่นำกลับมาใช้ได้หนึ่งแบบ สไลด์ปกติใช้โครงร่างเหล่านั้นและเก็บเนื้อหาที่เฉพาะเจาะจงของสไลด์
ฉันสามารถคัดลอกสไลด์โครงร่างจากการนำเสนอหนึ่งไปยังอีกการนำเสนอหนึ่งได้หรือไม่?
ทำได้ โดยเพิ่มสำเนาไปยังคอลเลกชันปลายทางด้วยเมธอด IGlobalLayoutSlideCollection::AddClone เมื่อคัดลอกระหว่างการนำเสนอ ควรตรวจสอบฟอนต์, ธีม, รูปภาพและทรัพยากรอื่น ๆ ที่โครงร่างต้นทางใช้
จะเกิดอะไรขึ้นเมื่อฉันแก้ไขโครงร่างที่กำลังใช้งานอยู่?
สไลด์ที่อิงจะสืบทอดการเปลี่ยนแปลงของโครงร่างเว้นแต่จะเขียนทับรูปแบบหรือออบเจกต์ที่เกี่ยวข้องในระดับท้องถิ่น รูปทรงของ placeholder และสไตล์ที่สืบทอดอาจเปลี่ยนแปลงในหลายสไลด์พร้อมกัน ใช้เมธอด GetDependingSlides เพื่อระบุสไลด์ที่ได้รับผลกระทบก่อนแก้ไขโครงร่าง
จะเกิดอะไรขึ้นหากฉันลบโครงร่างที่ยังคงถูกใช้?
Aspose.Slides จะโยงข้อยกเว้น PptxEditException ให้เปลี่ยนสไลด์ที่อิงก่อน หรือใช้เมธอด RemoveUnusedLayoutSlides เพื่อลบโครงร่างที่ไม่มีการอ้างอิงเท่านั้น









