Управление SmartArt в презентациях PowerPoint на .NET

Обзор

SmartArt — это диаграмма PowerPoint, состоящая из узлов, форм узлов и макета. С помощью Aspose.Slides для .NET вы можете создавать SmartArt, читать текст из его узлов, менять макет, проверять скрытые узлы, настраивать макеты организационных диаграмм и создавать организационные диаграммы с изображениями.

Получить текст из объекта SmartArt

Узел SmartArt может содержать одну или несколько форм. Чтобы прочитать видимый текст, пройдите по ISmartArt.AllNodes, затем считайте ITextFrame , возвращаемый ISmartArtShape.TextFrame.

using (Presentation presentation = new Presentation("sample.pptx"))
{
    ISlide slide = presentation.Slides[0];

    if (slide.Shapes[0] is ISmartArt smartArt)
    {
        foreach (ISmartArtNode node in smartArt.AllNodes)
        {
            foreach (ISmartArtShape nodeShape in node.Shapes)
            {
                if (nodeShape.TextFrame != null)
                {
                    Console.WriteLine(nodeShape.TextFrame.Text);
                }
            }
        }
    }
}

Изменить тип макета объекта SmartArt

Макет SmartArt определяет, как узлы размещаются и соединяются. В следующем примере создаётся объект SmartArt с типом SmartArtLayoutType BasicBlockList, затем он меняется на значение BasicProcess и сохраняется презентация.

using (Presentation presentation = new Presentation())
{
    ISmartArt smartArt = presentation.Slides[0].Shapes.AddSmartArt(
        10, 10, 400, 300, SmartArtLayoutType.BasicBlockList);

    smartArt.Layout = SmartArtLayoutType.BasicProcess;

    presentation.Save("ChangeSmartArtLayout_out.pptx", SaveFormat.Pptx);
}

Проверить, скрыт ли узел SmartArt

ISmartArtNode.IsHidden указывает, скрыт ли узел в модели данных SmartArt. Скрытые узлы могут присутствовать в структуре, даже если выбранный макет не отображает их как видимые элементы диаграммы.

В следующем примере к объекту SmartArt, использующему тип SmartArtLayoutType RadialCycle, добавляется узел и проверяется состояние скрытия узла.

using (Presentation presentation = new Presentation())
{
    ISmartArt smartArt = presentation.Slides[0].Shapes.AddSmartArt(
        10, 10, 400, 300, SmartArtLayoutType.RadialCycle);

    ISmartArtNode node = smartArt.AllNodes.AddNode();
    bool isHidden = node.IsHidden;

    if (isHidden)
    {
        Console.WriteLine("The node is hidden in the SmartArt data model.");
    }

    presentation.Save("CheckSmartArtHiddenProperty_out.pptx", SaveFormat.Pptx);
}

Получить или задать макет организационной диаграммы

Для диаграмм SmartArt, использующих макет организационной диаграммы, ISmartArtNode.OrganizationChartLayout определяет, как дочерние узлы располагаются под родительским узлом. Например, можно задать дочерним узлам висячее расположение слева, справа или с обеих сторон, в зависимости от выбранного OrganizationChartLayoutType.

В следующем примере создаётся организационная диаграмма, и для первого узла задаётся макет OrganizationChartLayoutType LeftHanging.

using (Presentation presentation = new Presentation())
{
    ISmartArt smartArt = presentation.Slides[0].Shapes.AddSmartArt(
        10, 10, 400, 300, SmartArtLayoutType.OrganizationChart);

    ISmartArtNode rootNode = smartArt.Nodes[0];
    rootNode.OrganizationChartLayout = OrganizationChartLayoutType.LeftHanging;

    presentation.Save("OrganizationChartLayout_out.pptx", SaveFormat.Pptx);
}

Создать картинную организационную диаграмму

Картинная организационная диаграмма — это макет SmartArt, предназначенный для иерархических диаграмм с заполнителями изображений. При добавлении объекта SmartArt на слайд используйте тип SmartArtLayoutType PictureOrganizationChart.

using (Presentation presentation = new Presentation())
{
    ISmartArt smartArt = presentation.Slides[0].Shapes.AddSmartArt(
        0, 0, 400, 400, SmartArtLayoutType.PictureOrganizationChart);

    presentation.Save("PictureOrganizationChart_out.pptx", SaveFormat.Pptx);
}

Часто задаваемые вопросы

Поддерживает ли SmartArt зеркалирование или обратное отображение для RTL‑языков?

Да. Свойство IsReversed изменяет направление диаграммы с слева направо на справа налево и обратно, если выбранный макет SmartArt поддерживает обратное отображение.

Как скопировать SmartArt на тот же слайд или в другую презентацию, сохранив форматирование?

Вы можете клонировать форму SmartArt с помощью ShapeCollection.AddClone или клонировать весь слайд, содержащий SmartArt. Оба подхода сохраняют размер, позицию и форматирование.

Как отрендерить SmartArt в растровое изображение для предварительного просмотра или экспорта в веб?

Отрендерите слайд или всю презентацию в PNG или JPEG. SmartArt рендерится как часть слайда.

Как найти конкретный объект SmartArt на слайде, если их несколько?

Задайте уникальное значение AlternativeText или Name для формы SmartArt, выполните поиск этого значения в Slide.Shapes, а затем проверьте, что найденная форма является ISmartArt.