Управление SmartArt в презентациях PowerPoint с помощью PHP
Обзор
SmartArt — это диаграмма PowerPoint, состоящая из узлов, форм узлов и макета. С помощью Aspose.Slides for PHP via Java вы можете создавать SmartArt, получать текст из его узлов, изменять макет, проверять скрытые узлы, настраивать макеты организационных схем и создавать организационные схемы с изображениями.
Получить текст из объекта SmartArt
Узел SmartArt может содержать одну или несколько фигур. Чтобы считать текст из фигур узла, пройдите по SmartArt::getAllNodes, затем прочитайте TextFrame, возвращаемый через SmartArtShape::getTextFrame.
Пример требует презентацию, содержащую хотя бы один слайд, и объект SmartArt в качестве первой формы на этом слайде. Он выводит каждый доступный текстовый кадр в консоль.
use aspose\slides\Presentation;
$presentation = new Presentation("sample.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$smartArt = $slide->getShapes()->get_Item(0);
for ($i = 0; $i < java_values($smartArt->getAllNodes()->size()); $i++) {
$node = $smartArt->getAllNodes()->get_Item($i);
for ($j = 0; $j < java_values($node->getShapes()->size()); $j++) {
$nodeShape = $node->getShapes()->get_Item($j);
if (!java_is_null($nodeShape->getTextFrame())) {
echo $nodeShape->getTextFrame()->getText() . PHP_EOL;
}
}
}
} finally {
$presentation->dispose();
}
Изменить тип макета объекта SmartArt
Макет SmartArt управляет расположением и связями узлов. В следующем примере создаётся объект SmartArt с типом макета SmartArtLayoutType BasicBlockList, затем он изменяется на значение BasicProcess и сохраняется презентация. Позиция и размер, передаваемые в ShapeCollection::addSmartArt, измеряются в пунктах. Для изменения макета используйте SmartArt::setLayout.
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\SmartArtLayoutType;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$smartArt = $slide->getShapes()->addSmartArt(10, 10, 400, 300, SmartArtLayoutType::BasicBlockList);
$smartArt->setLayout(SmartArtLayoutType::BasicProcess);
$presentation->save("ChangeSmartArtLayout.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Проверить, скрыт ли узел SmartArt
SmartArtNode::isHidden указывает, скрыт ли узел в модели данных SmartArt. Скрытые узлы могут существовать в структуре, даже если выбранный макет не отображает их как видимые элементы диаграммы.
В следующем примере к объекту SmartArt, использующему тип макета SmartArtLayoutType RadialCycle, добавляется узел, после чего проверяется его состояние скрытия. При обнаружении скрытого узла выводится сообщение, а диаграмма сохраняется.
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\SmartArtLayoutType;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$smartArt = $slide->getShapes()->addSmartArt(10, 10, 400, 300, SmartArtLayoutType::RadialCycle);
$node = $smartArt->getAllNodes()->addNode();
$isHidden = java_values($node->isHidden());
if ($isHidden) {
echo "The node is hidden in the SmartArt data model." . PHP_EOL;
}
$presentation->save("CheckSmartArtHiddenProperty.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Получить или задать макет организационной схемы
Для диаграмм SmartArt, использующих макет организационной схемы, методы SmartArtNode::getOrganizationChartLayout и SmartArtNode::setOrganizationChartLayout определяют расположение дочерних узлов относительно родительского узла. Например, вы можете задать подвешивание дочерних узлов слева, справа или с обеих сторон, используя тип OrganizationChartLayoutType.
В следующем примере создаётся организационная схема и для первого узла задаётся макет OrganizationChartLayoutType LeftHanging. Индекс 0 (нумерация с нуля) выбирает первый узел верхнего уровня; его дочерние узлы используют выбранное расположение. Затем изменённая презентация сохраняется.
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\SmartArtLayoutType;
use aspose\slides\OrganizationChartLayoutType;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$smartArt = $slide->getShapes()->addSmartArt(10, 10, 400, 300, SmartArtLayoutType::OrganizationChart);
$rootNode = $smartArt->getNodes()->get_Item(0);
$rootNode->setOrganizationChartLayout(OrganizationChartLayoutType::LeftHanging);
$presentation->save("OrganizationChartLayout.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Создать организационную схему с изображениями
Организационная схема с изображениями — это макет SmartArt, предназначенный для иерархических диаграмм с размещением изображений. При добавлении объекта SmartArt на слайд используйте тип SmartArtLayoutType PictureOrganizationChart. Этот пример сохраняет диаграмму с заполнителями изображений; заполнители не заполняются изображениями.
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\SmartArtLayoutType;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$smartArt = $slide->getShapes()->addSmartArt(0, 0, 400, 400, SmartArtLayoutType::PictureOrganizationChart);
$presentation->save("PictureOrganizationChart.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Преобразовать устаревшие диаграммы в группы фигур
При модернизации существующей презентации может потребоваться обновить организационную схему, созданную в PowerPoint 97–2003. Aspose.Slides представляет такие устаревшие диаграммы как объекты LegacyDiagram. Используйте LegacyDiagram::convertToGroupShape, чтобы преобразовать диаграмму в группу фигур, что позволяет редактировать отдельные визуальные элементы. Подробности см. в LegacyDiagram API Reference.
Преобразование добавляет новую группу в коллекцию фигур, не удаляя исходную диаграмму. После успешного преобразования удалите оригинал с помощью ShapeCollection::remove, чтобы избежать дублирования содержимого. Сначала соберите устаревшие диаграммы в список, а затем преобразуйте их, чтобы добавление и удаление фигур не нарушало итерацию.
В следующем примере открывается презентация, выполняется поиск по каждому слайду, диаграммы преобразуются в группы фигур, и обновлённая презентация сохраняется в формате PPTX.
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation("legacy-diagrams.ppt");
try {
$legacyDiagramType = new JavaClass("com.aspose.slides.ILegacyDiagram");
for ($i = 0; $i < java_values($presentation->getSlides()->size()); $i++) {
$slide = $presentation->getSlides()->get_Item($i);
$legacyDiagrams = [];
for ($j = 0; $j < java_values($slide->getShapes()->size()); $j++) {
$shape = $slide->getShapes()->get_Item($j);
if (java_instanceof($shape, $legacyDiagramType)) {
$legacyDiagrams[] = $shape;
}
}
foreach ($legacyDiagrams as $legacyDiagram) {
$groupShape = $legacyDiagram->convertToGroupShape();
if (!java_is_null($groupShape)) {
$slide->getShapes()->remove($legacyDiagram);
}
}
}
$presentation->save("modernized.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Сохранённая презентация содержит редактируемые группы фигур вместо преобразованных устаревших диаграмм, без оригинальных диаграмм рядом с ними. Откройте PPTX в PowerPoint, чтобы редактировать отдельные элементы внутри каждой группы, такие как текст, заливка или позиция.
FAQ
Поддерживает ли SmartArt зеркальное отображение или обратный порядок для RTL‑языков?
Да. Метод SmartArt::setReversed переключает направление диаграммы слева направо на справа налево и обратно, если выбранный макет SmartArt поддерживает обратный порядок.
Как скопировать SmartArt на тот же слайд или в другую презентацию, сохранив форматирование?
Вы можете клонировать форму SmartArt с помощью ShapeCollection::addClone или клонировать весь слайд, содержащий SmartArt. Оба подхода сохраняют размер, позицию и форматирование.
Как отрисовать SmartArt в растровое изображение для превью или веб‑экспорта?
Отрисуйте слайд или всю презентацию в PNG или JPEG. SmartArt отрисовывается как часть слайда.
Как найти конкретный объект SmartArt на слайде, если их несколько?
Используйте Shape::setAlternativeText или Shape::setName, чтобы задать отличающийся альтернативный текст или имя форме SmartArt, выполните поиск этого значения в BaseSlide::getShapes, а затем проверьте, что найденная форма является SmartArt.