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