ใช้หรือเปลี่ยนเค้าโครงสไลด์ใน C++

บทนำ

เค้าโครงสไลด์กำหนดการจัดวางกล่องตำแหน่งที่คั่นและรูปแบบการจัดรูปแบบสำหรับเนื้อหาบนสไลด์ มันควบคุมว่าตำแหน่งที่คั่นใดบ้างที่พร้อมใช้งานและปรากฏที่ไหน เค้าโครงสไลด์ช่วยให้คุณออกแบบงานนำเสนอได้อย่างรวดเร็วและสม่ำเสมอ — ไม่ว่าคุณกำลังสร้างสิ่งที่เรียบง่ายหรือซับซ้อนมากก็ตาม เค้าโครงสไลด์ที่พบได้บ่อยที่สุดใน PowerPoint ได้แก่:

Title Slide layout – มีตำแหน่งที่คั่นข้อความสองตำแหน่ง: หนึ่งสำหรับหัวเรื่องและอีกหนึ่งสำหรับหัวเรื่องย่อย.

Title and Content layout – มีตำแหน่งที่คั่นหัวเรื่องขนาดเล็กที่ด้านบนและตำแหน่งที่ใหญ่กว่าอยู่ด้านล่างสำหรับเนื้อหาหลัก (เช่น ข้อความ, รายการหัวข้อย่อย, แผนภูมิ, รูปภาพ และอื่น ๆ).

Blank layout – ไม่มีตำแหน่งที่คั่นใด ๆ ให้คุณควบคุมทั้งหมดในการออกแบบสไลด์ตั้งแต่ต้น.

เค้าโครงสไลด์เป็นส่วนหนึ่งของ master slide ซึ่งเป็นสไลด์ระดับบนสุดที่กำหนดสไตล์เค้าโครงสำหรับงานนำเสนอ คุณสามารถเข้าถึงและแก้ไขเค้าโครงสไลด์ผ่าน master slide — ไม่ว่าจะตามประเภท, ชื่อ หรือรหัสประจำตัวที่ไม่ซ้ำกัน หรือคุณสามารถแก้ไขเค้าโครงสไลด์เฉพาะโดยตรงภายในงานนำเสนอได้

เพื่อทำงานกับเค้าโครงสไลด์ใน Aspose.Slides for Android คุณสามารถใช้:

เพิ่มเค้าโครงสไลด์ลงในงานนำเสนอ

เพื่อปรับแต่งลักษณะและโครงสร้างของสไลด์ของคุณ คุณอาจต้องเพิ่มเค้าโครงสไลด์ใหม่ลงในงานนำเสนอ Aspose.Slides for Android อนุญาตให้คุณตรวจสอบว่าเค้าโครงที่ต้องการมีอยู่แล้วหรือไม่ เพิ่มใหม่หากจำเป็น และใช้เพื่อแทรกสไลด์ตามเค้าโครงนั้น

  1. สร้างอินสแตนซ์ของคลาส Presentation
  2. เข้าถึง IMasterLayoutSlideCollection
  3. ตรวจสอบว่าเค้าโครงสไลด์ที่ต้องการมีอยู่แล้วในคอลเลกชันหรือไม่ หากไม่มีให้เพิ่มเค้าโครงสไลด์ที่ต้องการ
  4. เพิ่มสไลด์เปล่าตามเค้าโครงสไลด์ใหม่
  5. บันทึกงานนำเสนอ

โค้ด C++ ต่อไปนี้แสดงวิธีเพิ่มเค้าโครงสไลด์ลงในงานนำเสนอ PowerPoint:

// สร้างอินสแตนซ์ของคลาส Presentation ที่เป็นตัวแทนไฟล์ PowerPoint.
auto presentation = MakeObject<Presentation>(u"Sample.pptx");

// Go through the layout slide types to select a layout slide.
auto layoutSlides = presentation->get_Master(0)->get_LayoutSlides();
SharedPtr<ILayoutSlide> layoutSlide;
if (layoutSlides->GetByType(SlideLayoutType::TitleAndObject) != nullptr)
{
    layoutSlide = layoutSlides->GetByType(SlideLayoutType::TitleAndObject);
}
else if (layoutSlides->GetByType(SlideLayoutType::Title) != nullptr)
{
    layoutSlide = layoutSlides->GetByType(SlideLayoutType::Title);
}

if (layoutSlide == nullptr)
{
    // สถานการณ์ที่งานนำเสนอไม่มีเค้าโครงทุกประเภท.
    // ไฟล์งานนำเสนอมีเพียงเค้าโครงประเภท Blank และ Custom เท่านั้น.
    // อย่างไรก็ตาม เค้าโครงสไลด์ที่เป็นประเภท Custom อาจมีชื่อที่จดจำได้,
    // เช่น "Title", "Title and Content" เป็นต้น ซึ่งสามารถใช้ในการเลือกเค้าโครงสไลด์ได้.
    // คุณสามารถพึ่งพาชุดประเภทรูปทรงตำแหน่งที่คั่นได้เช่นกัน.
    // ตัวอย่างเช่น สไลด์ Title ควรมีเพียงตำแหน่งที่คั่นประเภท Title เท่านั้น เป็นต้น.
    for (int i = 0; i < layoutSlides->get_Count(); i++)
    {
        auto titleAndObjectLayoutSlide = layoutSlides->idx_get(i);

        if (titleAndObjectLayoutSlide->get_Name().Equals(u"Title and Object"))
        {
            layoutSlide = titleAndObjectLayoutSlide;
            break;
        }
    }

    if (layoutSlide == nullptr)
    {
        for (int i = 0; i < layoutSlides->get_Count(); i++)
        {
            auto titleLayoutSlide = layoutSlides->idx_get(i);

            if (titleLayoutSlide->get_Name() == u"Title")
            {
                layoutSlide = titleLayoutSlide;
                break;
            }
        }

        if (layoutSlide == nullptr)
        {
            layoutSlide = layoutSlides->GetByType(SlideLayoutType::Blank);
            if (layoutSlide == nullptr)
            {
                layoutSlide = layoutSlides->Add(SlideLayoutType::TitleAndObject, u"Title and Object");
            }
        }
    }
}

// เพิ่มสไลด์เปล่าโดยใช้เค้าโครงสไลด์ที่เพิ่มไว้.
presentation->get_Slides()->InsertEmptySlide(0, layoutSlide);

// บันทึกงานนำเสนอไปยังดิสก์.
presentation->Save(u"Output.pptx", SaveFormat::Pptx);
presentation->Dispose();

ลบเค้าโครงสไลด์ที่ไม่ได้ใช้

Aspose.Slides มีเมธอด RemoveUnusedLayoutSlides จากคลาส Compress เพื่อให้คุณลบเค้าโครงสไลด์ที่ไม่ต้องการและไม่ได้ใช้

โค้ด C++ ต่อไปนี้แสดงวิธีลบเค้าโครงสไลด์จากงานนำเสนอ PowerPoint:

auto presentation = MakeObject<Presentation>(u"Presentation.pptx");

Compress::RemoveUnusedLayoutSlides(presentation);

presentation->Save(u"Output.pptx", SaveFormat::Pptx);
presentation->Dispose();

เพิ่มตำแหน่งที่คั่นลงในเค้าโครงสไลด์

Aspose.Slides มีเมธอด ILayoutSlide.get_PlaceholderManager ซึ่งอนุญาตให้คุณเพิ่มตำแหน่งที่คั่นใหม่ลงในเค้าโครงสไลด์

ผู้จัดการนี้มีเมธอดสำหรับประเภทตำแหน่งที่คั่นต่อไปนี้:

PowerPoint Placeholder ILayoutPlaceholderManager เมธอด
เนื้อหา AddContentPlaceholder(float x, float y, float width, float height)
เนื้อหา (แนวตั้ง) AddVerticalContentPlaceholder(float x, float y, float width, float height)
ข้อความ AddTextPlaceholder(float x, float y, float width, float height)
ข้อความ (แนวตั้ง) AddVerticalTextPlaceholder(float x, float y, float width, float height)
รูปภาพ AddPicturePlaceholder(float x, float y, float width, float height)
แผนภูมิ AddChartPlaceholder(float x, float y, float width, float height)
ตาราง AddTablePlaceholder(float x, float y, float width, float height)
SmartArt AddSmartArtPlaceholder(float x, float y, float width, float height)
สื่อ AddMediaPlaceholder(float x, float y, float width, float height)
รูปภาพออนไลน์ AddOnlineImagePlaceholder(float x, float y, float width, float height)

โค้ด C++ ต่อไปนี้แสดงวิธีเพิ่มรูปทรงตำแหน่งที่คั่นใหม่ลงในเค้าโครง Blank:

auto presentation = MakeObject<Presentation>();

// รับเค้าโครงสไลด์แบบ Blank.
auto layout = presentation->get_LayoutSlides()->GetByType(SlideLayoutType::Blank);

// รับผู้จัดการตำแหน่งที่คั่นของสไลด์เค้าโครง.
auto placeholderManager = layout->get_PlaceholderManager();

// เพิ่มตำแหน่งที่คั่นต่างๆ ไปยังสไลด์เค้าโครงแบบ Blank.
placeholderManager->AddContentPlaceholder(20, 20, 310, 270);
placeholderManager->AddVerticalTextPlaceholder(350, 20, 350, 270);
placeholderManager->AddChartPlaceholder(20, 310, 310, 180);
placeholderManager->AddTablePlaceholder(350, 310, 350, 180);

// Add a new slide with the Blank layout.
auto newSlide = presentation->get_Slides()->AddEmptySlide(layout);

presentation->Save(u"Placeholders.pptx", SaveFormat::Pptx);
presentation->Dispose();

ผลลัพธ์:

ตำแหน่งที่คั่นบนเค้าโครงสไลด์

ในงานนำเสนอ PowerPoint องค์ประกอบ Footer เช่น วันที่, เลขสไลด์, และข้อความกำหนดเองสามารถแสดงหรือซ่อนได้ตามเค้าโครงสไลด์ Aspose.Slides for Android อนุญาตให้คุณควบคุมการมองเห็นของตำแหน่งที่คั่น Footer เหล่านี้ ซึ่งมีประโยชน์เมื่อคุณต้องการให้เค้าโครงบางอย่างแสดงข้อมูล Footer ในขณะที่เค้าโครงอื่น ๆ คงความเรียบง่าย

  1. สร้างอินสแตนซ์ของคลาส Presentation
  2. รับอ้างอิงเค้าโครงสไลด์ตามดัชนี
  3. ตั้งค่าตำแหน่งที่คั่น Footer ของสไลด์ให้มองเห็น
  4. ตั้งค่าตำแหน่งที่คั่นเลขสไลด์ให้มองเห็น
  5. ตั้งค่าตำแหน่งที่คั่นวัน‑เวลาให้มองเห็น
  6. บันทึกงานนำเสนอ

โค้ด C++ ต่อไปนี้แสดงวิธีตั้งค่าการมองเห็นของ Footer สไลด์และทำงานที่เกี่ยวข้อง:

auto presentation = MakeObject<Presentation>(u"Presentation.ppt");
auto headerFooterManager = presentation->get_LayoutSlides()->idx_get(0)->get_HeaderFooterManager();

if (!headerFooterManager->get_IsFooterVisible())
{
    headerFooterManager->SetFooterVisibility(true);
}

if (!headerFooterManager->get_IsSlideNumberVisible())
{
    headerFooterManager->SetSlideNumberVisibility(true);
}

if (!headerFooterManager->get_IsDateTimeVisible())
{
    headerFooterManager->SetDateTimeVisibility(true);
}

headerFooterManager->SetFooterText(u"Footer text");
headerFooterManager->SetDateTimeText(u"Date and time text");

presentation->Save(u"Presentation.ppt", SaveFormat::Pptx);
presentation->Dispose();

​ในงานนำเสนอ PowerPoint องค์ประกอบ Footer เช่น วันที่, เลขสไลด์, และข้อความกำหนดเองสามารถควบคุมระดับ master slide เพื่อให้สอดคล้องกันทั่วเค้าโครงสไลด์ทั้งหมด Aspose.Slides for Android ทำให้คุณตั้งค่าการมองเห็นและเนื้อหาของตำแหน่งที่คั่น Footer เหล่านี้บน master slide แล้วกระจายการตั้งค่าเหล่านั้นไปยังสไลด์ลูกทั้งหมด วิธีนี้ทำให้ข้อมูล Footer มีความสม่ำเสมอทั่วทั้งงานนำเสนอ​

  1. สร้างอินสแตนซ์ของคลาส Presentation
  2. รับอ้างอิง master slide ตามดัชนี
  3. ตั้งค่าตำแหน่งที่คั่น Footer ของ master และสไลด์ลูกทั้งหมดให้มองเห็น
  4. ตั้งค่าตำแหน่งที่คั่นเลขสไลด์ของ master และสไลด์ลูกทั้งหมดให้มองเห็น
  5. ตั้งค่าตำแหน่งที่คั่นวัน‑เวลา ของ master และสไลด์ลูกทั้งหมดให้มองเห็น
  6. บันทึกงานนำเสนอ

โค้ด C++ ต่อไปนี้แสดงการดำเนินการนี้:

auto presentation = MakeObject<Presentation>();

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.pptx", SaveFormat::Pptx);
presentation->Dispose();

คำถามที่พบบ่อย

ความแตกต่างระหว่าง master slide กับ layout slide คืออะไร?

master slide กำหนดธีมโดยรวมและการจัดรูปแบบเริ่มต้นในขณะที่ layout slide กำหนดการจัดวางตำแหน่งที่คั่นเฉพาะสำหรับประเภทเนื้อหาต่าง ๆ

ฉันสามารถคัดลอก layout slide จากงานนำเสนอหนึ่งไปยังอีกงานนำเสนอหนึ่งได้หรือไม่?

ได้ คุณสามารถโคลน layout slide จากคอลเลกชัน layout slide ของงานนำเสนอหนึ่ง (เข้าถึงได้ผ่านเมธอด get_LayoutSlides) แล้วแทรกลงในงานนำเสนออื่นโดยใช้เมธอด AddClone

จะเกิดอะไรขึ้นถ้าฉันลบ layout slide ที่ยังถูกสไลด์อื่นใช้งานอยู่?

หากคุณพยายามลบ layout slide ที่ยังถูกอ้างอิงโดยสไลด์อย่างน้อยหนึ่งสไลด์ในงานนำเสนอ Aspose.Slides จะโยนข้อผิดพลาด PptxEditException เพื่อหลีกเลี่ยงปัญหานี้ให้ใช้เมธอด RemoveUnusedLayoutSlides ซึ่งจะลบเฉพาะเค้าโครงสไลด์ที่ไม่ได้ใช้งานอย่างปลอดภัย