Управление 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.