Управление SmartArt в презентациях PowerPoint с помощью C++
Обзор
SmartArt — это диаграмма PowerPoint, состоящая из узлов, фигур узлов и макета. С помощью Aspose.Slides для C++ вы можете создавать SmartArt, считывать текст из его узлов, изменять макет, проверять скрытые узлы, настраивать макеты организационных схем и создавать изображения организационных схем.
Получение текста из объекта SmartArt
У узла SmartArt может быть одна или несколько фигур. Чтобы прочитать видимый текст, пройдитесь по ISmartArt::get_AllNodes, затем прочитайте ITextFrame, возвращаемый ISmartArtShape::get_TextFrame.
Изменение типа макета объекта SmartArt
Макет SmartArt определяет, как узлы располагаются и соединяются. В следующем примере создаётся объект SmartArt с типом SmartArtLayoutType BasicBlockList, затем он меняется на значение BasicProcess и презентация сохраняется.
auto presentation = System::MakeObject<Presentation>();
auto smartArt = presentation->get_Slide(0)->get_Shapes()->AddSmartArt(
10.0f, 10.0f, 400.0f, 300.0f, SmartArtLayoutType::BasicBlockList);
smartArt->set_Layout(SmartArtLayoutType::BasicProcess);
presentation->Save(u"ChangeSmartArtLayout_out.pptx", SaveFormat::Pptx);
presentation->Dispose();
Проверка, скрыт ли узел SmartArt
ISmartArtNode::get_IsHidden указывает, скрыт ли узел в модели данных SmartArt. Скрытые узлы могут присутствовать в структуре, даже если выбранный макет не отображает их как видимые элементы диаграммы.
В следующем примере добавляется узел к объекту SmartArt, использующему тип SmartArtLayoutType RadialCycle, и проверяется состояние скрытости узла.
auto presentation = System::MakeObject<Presentation>();
auto smartArt = presentation->get_Slide(0)->get_Shapes()->AddSmartArt(
10.0f, 10.0f, 400.0f, 300.0f, SmartArtLayoutType::RadialCycle);
auto node = smartArt->get_AllNodes()->AddNode();
bool isHidden = node->get_IsHidden();
if (isHidden)
{
System::Console::WriteLine(u"The node is hidden in the SmartArt data model.");
}
presentation->Save(u"CheckSmartArtHiddenProperty_out.pptx", SaveFormat::Pptx);
presentation->Dispose();
Получение или установка макета организационной схемы
Для диаграмм SmartArt, использующих макет организационной схемы, ISmartArtNode::get_OrganizationChartLayout и ISmartArtNode::set_OrganizationChartLayout определяют, как дочерние узлы располагаются под родительским узлом. Например, можно задать «висеть» дочерним узлам слева, справа или с обеих сторон, в зависимости от выбранного OrganizationChartLayoutType.
В следующем примере создаётся организационная схема и для первого узла задаётся макет OrganizationChartLayoutType LeftHanging.
auto presentation = System::MakeObject<Presentation>();
auto smartArt = presentation->get_Slide(0)->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_out.pptx", SaveFormat::Pptx);
presentation->Dispose();
Создание изображённой организационной схемы
Изображённая организационная схема — это макет SmartArt, предназначенный для иерархических диаграмм с заполнителями изображений. При добавлении объекта SmartArt на слайд используйте значение SmartArtLayoutType PictureOrganizationChart.
auto presentation = System::MakeObject<Presentation>();
auto smartArt = presentation->get_Slide(0)->get_Shapes()->AddSmartArt(
0.0f, 0.0f, 400.0f, 400.0f, SmartArtLayoutType::PictureOrganizationChart);
presentation->Save(u"PictureOrganizationChart_out.pptx", SaveFormat::Pptx);
presentation->Dispose();
FAQ
Поддерживает ли 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.