จัดการ SmartArt ในงานนำเสนอ PowerPoint ด้วย C++
ภาพรวม
SmartArt คือแผนภาพ PowerPoint ที่สร้างจากโหนด, รูปร่างโหนด, และเค้าโครง. ด้วย Aspose.Slides for C++ คุณสามารถสร้าง SmartArt, อ่านข้อความจากโหนดของมัน, เปลี่ยนเค้าโครง, ตรวจสอบโหนดที่ซ่อนอยู่, ตั้งค่าเค้าโครงแผนภูมิโครงสร้างองค์กร, และสร้างแผนภูมิโครงสร้างองค์กรแบบรูปภาพ.
รับข้อความจากอ็อบเจ็กต์ SmartArt
โหนด SmartArt สามารถมีรูปร่างได้หนึ่งหรือหลายรูปแบบ. เพื่ออ่านข้อความจากรูปร่างของโหนด ให้วนลูปผ่าน ISmartArt::get_AllNodes, จากนั้นอ่าน ITextFrame ที่ส่งกลับโดย ISmartArtShape::get_TextFrame.
ตัวอย่างนี้ต้องการงานนำเสนอที่มีอย่างน้อยหนึ่งสไลด์และอ็อบเจ็กต์ SmartArt เป็นรูปร่างแรกบนสไลด์นั้น. มันพิมพ์แต่ละกรอบข้อความที่มีอยู่ไปยังคอนโซล.
#include <DOM/ISlide.h>
#include <DOM/ITextFrame.h>
#include <DOM/Presentation.h>
#include <DOM/SmartArt/ISmartArt.h>
#include <DOM/SmartArt/ISmartArtNode.h>
#include <DOM/SmartArt/ISmartArtNodeCollection.h>
#include <DOM/SmartArt/ISmartArtShape.h>
#include <DOM/SmartArt/ISmartArtShapeCollection.h>
#include <system/console.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::SmartArt;
using namespace System;
auto presentation = MakeObject<Presentation>(u"sample.pptx");
auto slide = presentation->get_Slide(0);
auto smartArt = ExplicitCast<ISmartArt>(slide->get_Shape(0));
for (auto nodeIndex = 0; nodeIndex < smartArt->get_AllNodes()->get_Count(); nodeIndex++)
{
auto node = smartArt->get_AllNodes()->idx_get(nodeIndex);
for (auto shapeIndex = 0; shapeIndex < node->get_Shapes()->get_Count(); shapeIndex++)
{
auto nodeShape = node->get_Shape(shapeIndex);
if (nodeShape->get_TextFrame() != nullptr)
{
Console::WriteLine(nodeShape->get_TextFrame()->get_Text());
}
}
}
presentation->Dispose();
เปลี่ยนประเภทเค้าโครงของอ็อบเจ็กต์ SmartArt
เค้าโครง SmartArt กำหนดวิธีจัดเรียงและเชื่อมต่อโหนดต่างๆ. ตัวอย่างต่อไปนี้สร้างอ็อบเจ็กต์ SmartArt ด้วยค่า SmartArtLayoutType BasicBlockList, แล้วเปลี่ยนเป็นค่า BasicProcess และบันทึกงานนำเสนอ. ตำแหน่งและขนาดที่ส่งให้ IShapeCollection::AddSmartArt มีหน่วยเป็นพอยต์. ใช้ ISmartArt::set_Layout เพื่อเปลี่ยนเค้าโครง.
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <DOM/SmartArt/ISmartArt.h>
#include <DOM/SmartArt/SmartArtLayoutType.h>
#include <Export/SaveFormat.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace Aspose::Slides::SmartArt;
using namespace System;
auto presentation = MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto smartArt = slide->get_Shapes()->AddSmartArt(10.0f, 10.0f, 400.0f, 300.0f, SmartArtLayoutType::BasicBlockList);
smartArt->set_Layout(SmartArtLayoutType::BasicProcess);
presentation->Save(u"ChangeSmartArtLayout.pptx", SaveFormat::Pptx);
presentation->Dispose();
ตรวจสอบว่าโหนด SmartArt ถูกซ่อนหรือไม่
ISmartArtNode::get_IsHidden บ่งบอกว่าโหนดนั้นถูกซ่อนอยู่ในโมเดลข้อมูล SmartArt หรือไม่. โหนดที่ซ่อนอยู่สามารถมีอยู่ในโครงสร้างแม้ว่าเค้าโครงที่เลือกจะไม่แสดงเป็นองค์ประกอบแผนภาพที่มองเห็นได้.
ตัวอย่างต่อไปนี้เพิ่มโหนดเข้าไปในอ็อบเจ็กต์ SmartArt ที่ใช้ค่า SmartArtLayoutType RadialCycle และตรวจสอบสถานะการซ่อนของโหนดที่เพิ่มเข้าไป. มันพิมพ์ข้อความหากโหนดถูกซ่อนและบันทึกแผนภาพ.
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <DOM/SmartArt/ISmartArt.h>
#include <DOM/SmartArt/ISmartArtNode.h>
#include <DOM/SmartArt/ISmartArtNodeCollection.h>
#include <DOM/SmartArt/SmartArtLayoutType.h>
#include <Export/SaveFormat.h>
#include <system/console.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace Aspose::Slides::SmartArt;
using namespace System;
auto presentation = MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto smartArt = slide->get_Shapes()->AddSmartArt(10.0f, 10.0f, 400.0f, 300.0f, SmartArtLayoutType::RadialCycle);
auto node = smartArt->get_AllNodes()->AddNode();
auto isHidden = node->get_IsHidden();
if (isHidden)
{
Console::WriteLine(u"The node is hidden in the SmartArt data model.");
}
presentation->Save(u"CheckSmartArtHiddenProperty.pptx", SaveFormat::Pptx);
presentation->Dispose();
รับหรือกำหนดเค้าโครงแผนภูมิโครงสร้างองค์กร
สำหรับแผนภาพ SmartArt ที่ใช้เค้าโครงแผนภูมิโครงสร้างองค์กร, ISmartArtNode::get_OrganizationChartLayout และ ISmartArtNode::set_OrganizationChartLayout กำหนดวิธีจัดเรียงโหนดลูกใต้โหนดพ่อแม่. ตัวอย่างเช่น คุณสามารถตั้งค่าให้โหนดลูกห้อยจากด้านซ้าย, ขวา หรือทั้งสองด้าน, ขึ้นอยู่กับค่า OrganizationChartLayoutType ที่เลือก.
ตัวอย่างต่อไปนี้สร้างแผนภูมิโครงสร้างองค์กรและตั้งค่าเค้าโครงสำหรับโหนดแรกเป็นค่า OrganizationChartLayoutType LeftHanging. ดัชนีเริ่มต้นจากศูนย์ 0 เลือกโหนดระดับบนสุดแรก; โหนดลูกของมันจะใช้การจัดเรียงที่เลือก. งานนำเสนอที่แก้ไขแล้วจึงถูกบันทึก.
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <DOM/SmartArt/ISmartArt.h>
#include <DOM/SmartArt/ISmartArtNode.h>
#include <DOM/SmartArt/OrganizationChartLayoutType.h>
#include <DOM/SmartArt/SmartArtLayoutType.h>
#include <Export/SaveFormat.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace Aspose::Slides::SmartArt;
using namespace System;
auto presentation = MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto smartArt = slide->get_Shapes()->AddSmartArt(10.0f, 10.0f, 400.0f, 300.0f, SmartArtLayoutType::OrganizationChart);
auto rootNode = smartArt->get_Node(0);
rootNode->set_OrganizationChartLayout(OrganizationChartLayoutType::LeftHanging);
presentation->Save(u"OrganizationChartLayout.pptx", SaveFormat::Pptx);
presentation->Dispose();
สร้างแผนภูมิโครงสร้างองค์กรแบบรูปภาพ
แผนภูมิโครงสร้างองค์กรแบบรูปภาพคือเค้าโครง SmartArt ที่ออกแบบมาสำหรับแผนภาพลำดับชั้นที่มีที่วางภาพ. ใช้ค่า SmartArtLayoutType PictureOrganizationChart เมื่อเพิ่มอ็อบเจ็กต์ SmartArt ลงในสไลด์. ตัวอย่างนี้บันทึกแผนภาพที่มีที่วางภาพ; ไม่ได้เติมที่วางภาพด้วยรูปภาพ.
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <DOM/SmartArt/SmartArtLayoutType.h>
#include <Export/SaveFormat.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace Aspose::Slides::SmartArt;
using namespace System;
auto presentation = MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto smartArt = slide->get_Shapes()->AddSmartArt(0.0f, 0.0f, 400.0f, 400.0f, SmartArtLayoutType::PictureOrganizationChart);
presentation->Save(u"PictureOrganizationChart.pptx", SaveFormat::Pptx);
presentation->Dispose();
แปลงแผนภาพ Legacy เป็นกลุ่มของรูปร่าง
เมื่อต้องปรับปรุงงานนำเสนอที่มีอยู่ คุณอาจต้องอัปเดตแผนภูมิโครงสร้างองค์กรที่สร้างขึ้นใน PowerPoint 97–2003. Aspose.Slides แสดงแผนภาพ Legacy เหล่านี้เป็นอ็อบเจ็กต์ ILegacyDiagram. ใช้ ILegacyDiagram::ConvertToGroupShape เพื่อแปลงแผนภาพเป็นกลุ่มของรูปร่างเพื่อให้คุณสามารถแก้ไของค์ประกอบภาพแต่ละส่วนได้. ดู LegacyDiagram API Reference สำหรับรายละเอียด.
การแปลงจะเพิ่มกลุ่มใหม่ลงในคอลเลกชันของรูปร่างโดยไม่ลบแผนภาพต้นฉบับ. หลังจากการแปลงสำเร็จ ให้ลบต้นฉบับด้วย IShapeCollection::Remove เพื่อหลีกเลี่ยงเนื้อหาซ้ำซ้อน. รวบรวมแผนภาพ legacy ลงในเวกเตอร์ก่อนทำการแปลงเพื่อให้การเพิ่มและลบรูปร่างไม่ทำให้การวนลูปถูกขัดจังหวะ.
ตัวอย่างต่อไปนี้เปิดงานนำเสนอ, ค้นหาทุกสไลด์, แปลงแผนภาพเป็นกลุ่มของรูปร่าง, และบันทึกงานนำเสนอที่อัปเดตเป็น PPTX.
#include <DOM/ILegacyDiagram.h>
#include <DOM/IGroupShape.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/ISlideCollection.h>
#include <DOM/Presentation.h>
#include <Export/SaveFormat.h>
#include <vector>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
auto presentation = MakeObject<Presentation>(u"legacy-diagrams.ppt");
for (auto slideIndex = 0; slideIndex < presentation->get_Slides()->get_Count(); slideIndex++)
{
auto slide = presentation->get_Slide(slideIndex);
std::vector<SharedPtr<ILegacyDiagram>> legacyDiagrams;
for (auto shapeIndex = 0; shapeIndex < slide->get_Shapes()->get_Count(); shapeIndex++)
{
auto shape = slide->get_Shape(shapeIndex);
if (ObjectExt::Is<ILegacyDiagram>(shape))
{
auto legacyDiagram = ExplicitCast<ILegacyDiagram>(shape);
legacyDiagrams.push_back(legacyDiagram);
}
}
for (auto legacyDiagram : legacyDiagrams)
{
auto groupShape = legacyDiagram->ConvertToGroupShape();
if (groupShape != nullptr)
{
slide->get_Shapes()->Remove(legacyDiagram);
}
}
}
presentation->Save(u"modernized.pptx", SaveFormat::Pptx);
presentation->Dispose();
งานนำเสนอที่บันทึกไว้จะมีกลุ่มของรูปร่างที่แก้ไขได้แทนแผนภาพ legacy ที่แปลงแล้ว, โดยไม่มีแผนภาพต้นฉบับเหลืออยู่เคียงข้าง. เปิดไฟล์ PPTX ใน PowerPoint เพื่อแก้ไของค์ประกอบแต่ละรายการภายในแต่ละกลุ่ม, เช่น ข้อความ, การเติมสี หรือ ตำแหน่ง.
คำถามที่พบบ่อย
SmartArt รองรับการสะท้อนหรือการกลับด้านสำหรับภาษาตำแหน่งจากขวาไปซ้าย (RTL) หรือไม่?
มี. เมธอด SmartArt::set_IsReversed จะสลับทิศทางของแผนภาพจากซ้ายไปขวาเป็นขวาไปซ้าย หรือกลับกัน, เมื่อเค้าโครง SmartArt ที่เลือกรองรับการกลับด้าน.
ฉันจะคัดลอก SmartArt ไปยังสไลด์เดียวกันหรือไปยังงานนำเสนออื่นโดยคงรูปแบบไว้ได้อย่างไร?
คุณสามารถ คัดลอกรูปร่าง SmartArt ด้วย ShapeCollection::AddClone หรือ คัดลอกสไลด์ทั้งหมด ที่มี SmartArt. ทั้งสองวิธีจะคงขนาด, ตำแหน่ง, และรูปแบบไว้.
ฉันจะเรนเดอร์ SmartArt เป็นภาพราสเตอร์เพื่อการแสดงตัวอย่างหรือส่งออกเว็บได้อย่างไร?
เรนเดอร์สไลด์ หรือทั้งงานนำเสนอเป็น PNG หรือ JPEG. SmartArt จะถูกเรนเดอร์เป็นส่วนหนึ่งของสไลด์.
ฉันจะหาวัตถุ SmartArt เฉพาะบนสไลด์ได้อย่างไรหากมีหลายอ็อบเจ็กต์?
กำหนดค่า Shape::set_AlternativeText หรือ Shape::set_Name ที่เป็นเอกลักษณ์บนรูปร่าง SmartArt, ค้นหาค่าดังกล่าวใน BaseSlide::get_Shapes, จากนั้นตรวจสอบว่ารูปร่างที่ตรงกันเป็น ISmartArt.