Управление SmartArt в презентациях PowerPoint с помощью PHP

Обзор

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

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

Узел SmartArt может содержать одну или несколько форм. Чтобы прочитать видимый текст, пройдите по всем узлам с помощью SmartArt::getAllNodes, затем получите TextFrame, возвращаемый методом SmartArtShape::getTextFrame.

$presentation = new Presentation("sample.pptx");
try {
    $slide = $presentation->getSlides()->get_Item(0);
    $shape = $slide->getShapes()->get_Item(0);

    if (java_instanceof($shape, new JavaClass("com.aspose.slides.ISmartArt"))) {
        $smartArt = $shape;

        foreach ($smartArt->getAllNodes() as $smartArtNode) {
            foreach ($smartArtNode->getShapes() as $smartArtShape) {
                if (!java_is_null($smartArtShape->getTextFrame())) {
                    echo($smartArtShape->getTextFrame()->getText());
                }
            }
        }
    }
} finally {
    $presentation->dispose();
}

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

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

$presentation = new Presentation();
try {
    $smartArt = $presentation->getSlides()->get_Item(0)->getShapes()->addSmartArt(
        10, 10, 400, 300, SmartArtLayoutType::BasicBlockList);

    $smartArt->setLayout(SmartArtLayoutType::BasicProcess);

    $presentation->save("ChangeSmartArtLayout_out.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

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

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

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

$presentation = new Presentation();
try {
    $smartArt = $presentation->getSlides()->get_Item(0)->getShapes()->addSmartArt(
        10, 10, 400, 300, SmartArtLayoutType::RadialCycle);

    $smartArtNode = $smartArt->getAllNodes()->addNode();
    $isHidden = $smartArtNode->isHidden();

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

    $presentation->save("CheckSmartArtHiddenProperty_out.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

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

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

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

$presentation = new Presentation();
try {
    $smartArt = $presentation->getSlides()->get_Item(0)->getShapes()->addSmartArt(
        10, 10, 400, 300, SmartArtLayoutType::OrganizationChart);

    $rootNode = $smartArt->getNodes()->get_Item(0);
    $rootNode->setOrganizationChartLayout(OrganizationChartLayoutType::LeftHanging);

    $presentation->save("OrganizationChartLayout_out.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

Создать организационную схему с изображениями

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

$presentation = new Presentation();
try {
    $smartArt = $presentation->getSlides()->get_Item(0)->getShapes()->addSmartArt(
        0, 0, 400, 400, SmartArtLayoutType::PictureOrganizationChart);

    $presentation->save("PictureOrganizationChart_out.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

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

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

Да. Метод SmartArt::setReversed переключает направление диаграммы слева направо на справа налево (и обратно), если выбранный макет SmartArt поддерживает обратный порядок.

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

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

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

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

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

Задайте уникальное значение свойств Shape::getAlternativeText или Shape::getName для формы SmartArt, выполните поиск этого значения через BaseSlide::getShapes и проверьте, что найденная форма является SmartArt.