Управление узлами SmartArt в презентациях с использованием Java
Добавить узел SmartArt
Aspose.Slides for Java предоставляет самый простой API для управления фигурами SmartArt самым простым способом. Приведённый пример кода поможет добавить узел и дочерний узел внутри фигуры SmartArt.
- Создайте экземпляр класса Presentation и загрузите презентацию с фигурой SmartArt.
- Получите ссылку на первый слайд, используя его индекс.
- Пройдитесь по каждой фигуре на первом слайде.
- Проверьте, является ли фигура типом SmartArt и выполните приведение выбранной фигуры к типу SmartArt, если это SmartArt.
- Add a new Node в фигуру SmartArt NodeCollection и задайте текст в TextFrame.
- Теперь Add Child Node в только что добавленный SmartArt узел и задайте текст в TextFrame.
- Сохраните презентацию.
// Загрузить требуемую презентацию
Presentation pres = new Presentation("SimpleSmartArt.pptx");
try {
// Пройти по каждой фигуре на первом слайде
for (IShape shape : pres.getSlides().get_Item(0).getShapes())
{
// Проверить, является ли фигура типом SmartArt
if (shape instanceof SmartArt)
{
// Привести тип фигуры к SmartArt
SmartArt smart = (SmartArt) shape;
// Добавление нового узла SmartArt
SmartArtNode TemNode = (SmartArtNode) smart.getAllNodes().addNode();
// Добавление текста
TemNode.getTextFrame().setText("Test");
// Добавление нового дочернего узла в родительский узел. Он будет добавлен в конец коллекции
SmartArtNode newNode = (SmartArtNode) TemNode.getChildNodes().addNode();
// Добавление текста
newNode.getTextFrame().setText("New Node Added");
}
}
// Сохранение презентации
pres.save("AddSmartArtNode.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Добавить узел SmartArt в определённой позиции
В следующем примере кода мы объясняем, как добавить дочерние узлы, принадлежащие соответствующим узлам фигуры SmartArt, в определённой позиции.
- Создайте экземпляр класса Presentation.
- Получите ссылку на первый слайд, используя его индекс.
- Добавьте в доступный слайд тип фигуры StackedList SmartArt.
- Получите доступ к первому узлу в добавленной фигуре SmartArt.
- Теперь добавьте Child Node для выбранного Node на позиции 2 и задайте его текст.
- Сохраните презентацию.
// Создание экземпляра презентации
Presentation pres = new Presentation();
try {
// Доступ к слайду презентации
ISlide slide = pres.getSlides().get_Item(0);
// Добавить Smart Art IShape
ISmartArt smart = slide.getShapes().addSmartArt(0, 0, 400, 400, SmartArtLayoutType.StackedList);
// Доступ к узлу SmartArt по индексу 0
ISmartArtNode node = smart.getAllNodes().get_Item(0);
// Добавление нового дочернего узла в позицию 2 родительского узла
SmartArtNode chNode = (SmartArtNode) ((SmartArtNodeCollection) node.getChildNodes()).addNodeByPosition(2);
// Добавить текст
chNode.getTextFrame().setText("Sample Text Added");
// Сохранить презентацию
pres.save("AddSmartArtNodeByPosition.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Доступ к узлу SmartArt
Приведённый пример кода поможет получить доступ к узлам внутри фигуры SmartArt. Обратите внимание, что вы не можете изменить LayoutType SmartArt, так как он доступен только для чтения и задаётся только при добавлении фигуры SmartArt.
- Создайте экземпляр класса Presentation и загрузите презентацию с фигурой SmartArt.
- Получите ссылку на первый слайд, используя его индекс.
- Пройдитесь по каждой фигуре на первом слайде.
- Проверьте, является ли фигура типом SmartArt и выполните приведение выбранной фигуры к типу SmartArt, если это SmartArt.
- Пройдитесь по всем Nodes внутри фигуры SmartArt.
- Получите и отобразите информацию, такую как позиция узла SmartArt, уровень и текст.
// Создать экземпляр класса Presentation
Presentation pres = new Presentation("SmartArtShape.pptx");
try {
// Получить первый слайд
ISlide slide = pres.getSlides().get_Item(0);
// Обойти все фигуры на первом слайде
for (IShape shape : slide.getShapes())
{
// Проверить, является ли фигура типом SmartArt
if (shape instanceof ISmartArt)
{
// Привести тип фигуры к SmartArt
ISmartArt smart = (ISmartArt) shape;
// Обойти все узлы внутри SmartArt
for (int i = 0; i < smart.getAllNodes().size(); i++)
{
// Получить узел SmartArt с индексом i
SmartArtNode node = (SmartArtNode) smart.getAllNodes().get_Item(i);
// Вывод параметров узла SmartArt
System.out.print(node.getTextFrame().getText() + " " + node.getLevel() + " " + node.getPosition());
}
}
}
} finally {
if (pres != null) pres.dispose();
}
Доступ к дочернему узлу SmartArt
Приведённый пример кода поможет получить доступ к дочерним узлам, принадлежащим соответствующим узлам фигуры SmartArt.
- Создайте экземпляр класса Presentation и загрузите презентацию с фигурой SmartArt.
- Получите ссылку на первый слайд, используя его индекс.
- Пройдитесь по каждой фигуре на первом слайде.
- Проверьте, является ли фигура типом SmartArt и выполните приведение выбранной фигуры к типу SmartArt, если это SmartArt.
- Пройдитесь по всем Nodes внутри фигуры SmartArt.
- Для каждого выбранного узла фигуры SmartArt Node пройдитесь по всем Child Nodes внутри конкретного узла.
- Получите и отобразите информацию, такую как позиция Child Node , уровень и текст.
// Создать экземпляр класса Presentation
Presentation pres = new Presentation("AccessChildNodes.pptx");
try {
// Получить первый слайд
ISlide slide = pres.getSlides().get_Item(0);
// Обойти все фигуры на первом слайде
for (IShape shape : slide.getShapes())
{
// Проверить, является ли фигура типом SmartArt
if (shape instanceof ISmartArt)
{
// Привести тип фигуры к SmartArt
ISmartArt smart = (ISmartArt) shape;
// Обойти все узлы внутри SmartArt
for (int i = 0; i < smart.getAllNodes().size(); i++)
{
// Получить узел SmartArt с индексом i
SmartArtNode node0 = (SmartArtNode) smart.getAllNodes().get_Item(i);
// Обойти дочерние узлы в узле SmartArt с индексом i
for (int j = 0; j < node0.getChildNodes().size(); j++)
{
// Получить дочерний узел в узле SmartArt
SmartArtNode node = (SmartArtNode) node0.getChildNodes().get_Item(j);
// Вывод параметров дочернего узла SmartArt
System.out.print("j = " + j + ", Text = " + node.getTextFrame().getText() + ", Level = " + node.getLevel() + ", Position = " + node.getPosition());
}
}
}
}
} finally {
if (pres != null) pres.dispose();
}
Доступ к дочернему узлу SmartArt в определённой позиции
В этом примере мы научимся получать доступ к дочерним узлам в определённой позиции, принадлежащим соответствующим узлам фигуры SmartArt.
- Создайте экземпляр класса Presentation .
- Получите ссылку на первый слайд, используя его индекс.
- Добавьте в слайд фигуру типа StackedList SmartArt.
- Получите доступ к добавленной фигуре SmartArt.
- Получите узел с индексом 0 в полученной фигуре SmartArt.
- Теперь получите Child Node на позиции 1 для выбранного узла SmartArt, используя метод get_Item().
- Получите и отобразите информацию, такую как позиция Child Node , уровень и текст.
// Создать экземпляр презентации
Presentation pres = new Presentation();
try {
// Доступ к первому слайду
ISlide slide = pres.getSlides().get_Item(0);
// Добавление фигуры SmartArt на первый слайд
ISmartArt smart = slide.getShapes().addSmartArt(0, 0, 400, 400, SmartArtLayoutType.StackedList);
// Доступ к узлу SmartArt с индексом 0
ISmartArtNode node = smart.getAllNodes().get_Item(0);
// Доступ к дочернему узлу на позиции 1 в родительском узле
int position = 1;
SmartArtNode chNode = (SmartArtNode) ((SmartArtNodeCollection) node.getChildNodes()).get_Item(position);
// Вывод параметров дочернего узла SmartArt
System.out.print("Text = " + chNode.getTextFrame().getText() + ", Level = " + chNode.getLevel() + ", Position = " + chNode.getPosition());
} finally {
if (pres != null) pres.dispose();
}
Удалить узел SmartArt
В этом примере мы научимся удалять узлы внутри фигуры SmartArt.
- Создайте экземпляр класса Presentation и загрузите презентацию с фигурой SmartArt.
- Получите ссылку на первый слайд, используя его индекс.
- Пройдитесь по каждой фигуре на первом слайде.
- Проверьте, является ли фигура типом SmartArt и выполните приведение выбранной фигуры к типу SmartArt если это SmartArt.
- Проверьте, содержит ли SmartArt более 0 узлов.
- Выберите узел SmartArt, который необходимо удалить.
- Теперь удалите выбранный узел, используя метод RemoveNode .
- Сохраните презентацию.
// Загрузить нужную презентацию
Presentation pres = new Presentation("AddSmartArtNode.pptx");
try {
// Пройти по каждой фигуре на первом слайде
for (IShape shape : pres.getSlides().get_Item(0).getShapes())
{
// Проверить, является ли фигура типом SmartArt
if (shape instanceof ISmartArt)
{
// Привести тип фигуры к SmartArt
ISmartArt smart = (ISmartArt) shape;
if (smart.getAllNodes().size() > 0)
{
// Получить узел SmartArt с индексом 0
ISmartArtNode node = smart.getAllNodes().get_Item(0);
// Удалить выбранный узел
smart.getAllNodes().removeNode(node);
}
}
}
// Сохранить презентацию
pres.save("RemoveSmartArtNode.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Удалить узел SmartArt из определённой позиции
В этом примере мы научимся удалять узлы внутри фигуры SmartArt в конкретной позиции.
- Создайте экземпляр класса Presentation и загрузите презентацию с фигурой SmartArt.
- Получите ссылку на первый слайд, используя его индекс.
- Пройдитесь по каждой фигуре на первом слайде.
- Проверьте, является ли фигура типом SmartArt и выполните приведение выбранной фигуры к типу SmartArt если это SmartArt.
- Выберите узел фигуры SmartArt с индексом 0.
- Теперь проверьте, имеет ли выбранный узел SmartArt более 2 дочерних узла.
- Теперь удалите узел на Position 1 с помощью метода RemoveNode .
- Сохраните презентацию.
// Загрузить нужную презентацию
Presentation pres = new Presentation("AddSmartArtNode.pptx");
try {
// Пройти по каждой фигуре на первом слайде
for (IShape shape : pres.getSlides().get_Item(0).getShapes())
{
// Проверить, является ли фигура типом SmartArt
if (shape instanceof SmartArt)
{
// Привести тип фигуры к SmartArt
SmartArt smart = (SmartArt) shape;
if (smart.getAllNodes().size() > 0)
{
// Получить узел SmartArt с индексом 0
ISmartArtNode node = smart.getAllNodes().get_Item(0);
if (node.getChildNodes().size() >= 2)
{
// Удалить дочерний узел на позиции 1
(node.getChildNodes()).removeNode(1);
}
}
}
}
// Сохранить презентацию
pres.save("RemoveSmartArtNodeByPosition.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Установить пользовательскую позицию для дочернего узла в объекте SmartArt
Теперь Aspose.Slides for Java поддерживает установку свойств SmartArtShape X и Y. Пример кода ниже показывает, как установить пользовательскую позицию, размер и поворот SmartArtShape; также обратите внимание, что добавление новых узлов вызывает перерасчёт позиций и размеров всех узлов. При пользовательских настройках позиции пользователь может задавать узлы согласно требованиям.
// Создать экземпляр класса Presentation
Presentation pres = new Presentation("SimpleSmartArt.pptx");
try{
ISmartArt smart = pres.getSlides().get_Item(0).getShapes().addSmartArt(20, 20, 600, 500, SmartArtLayoutType.OrganizationChart);
// Переместить фигуру SmartArt в новое положение
ISmartArtNode node = smart.getAllNodes().get_Item(1);
ISmartArtShape shape = node.getShapes().get_Item(1);
shape.setX(shape.getX() + shape.getWidth() * 2);
shape.setY(shape.getY() - shape.getHeight() * 2);
// Изменить ширину фигуры SmartArt
node = smart.getAllNodes().get_Item(2);
shape = node.getShapes().get_Item(1);
shape.setWidth(shape.getWidth() + shape.getWidth() * 2);
// Изменить высоту фигуры SmartArt
node = smart.getAllNodes().get_Item(3);
shape = node.getShapes().get_Item(1);
shape.setHeight(shape.getHeight() + shape.getHeight() * 2);
// Изменить вращение фигуры SmartArt
node = smart.getAllNodes().get_Item(4);
shape = node.getShapes().get_Item(1);
shape.setRotation(90);
pres.save("SmartArt.pptx", SaveFormat.Pptx);
}finally {
pres.dispose();
}
Проверка узла‑помощника
Мы будем использовать следующую исходную фигуру SmartArt для наших исследований в различных разделах этой статьи.
![]() |
|---|
| Figure: Source SmartArt shape in slide |
В следующем примере кода мы исследуем, как определить Assistant Nodes в коллекции узлов SmartArt и изменить их.
- Создайте экземпляр класса Presentation и загрузите презентацию с фигурой SmartArt.
- Получите ссылку на второй слайд, используя его индекс.
- Пройдитесь по каждой фигуре внутри первого слайда.
- Проверьте, является ли фигура типом SmartArt и выполните приведение выбранной фигуры к типу SmartArt если это SmartArt.
- Пройдитесь по всем узлам внутри фигуры SmartArt и проверьте, являются ли они Assistant Nodes .
- Измените статус узла‑помощника на обычный узел.
- Сохраните презентацию.
// Создание экземпляра презентации
Presentation pres = new Presentation("AddNodes.pptx");
try {
// Обойти каждую фигуру на первом слайде
for (IShape shape : pres.getSlides().get_Item(0).getShapes())
{
// Проверить, является ли фигура типом SmartArt
if (shape instanceof ISmartArt)
{
// Привести тип фигуры к SmartArt
ISmartArt smart = (SmartArt) shape;
// Обход всех узлов фигуры SmartArt
for (int i = 0; i < smart.getAllNodes().size(); i++)
{
ISmartArtNode node = smart.getAllNodes().get_Item(i);
// Проверить, является ли узел узлом‑помощником
if (node.isAssistant())
{
// Установить узел‑помощник в false и сделать его обычным узлом
node.isAssistant();
}
}
}
}
// Сохранить презентацию
pres.save("ChangeAssitantNode.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
![]() |
|---|
| Figure: Assistant Nodes Changed in SmartArt shape inside slide |
Установить формат заливки узла
Aspose.Slides for Java позволяет добавлять пользовательские фигуры SmartArt и задавать их формат заливки. Эта статья объясняет, как создавать и получать доступ к фигурам SmartArt и задавать их формат заливки с помощью Aspose.Slides for Java.
Пожалуйста, выполните следующие шаги:
- Создайте экземпляр класса Presentation .
- Получите ссылку на слайд, используя его индекс.
- Добавьте фигуру SmartArt, задав её LayoutType .
- Установите FillFormat для узлов фигуры SmartArt.
- Запишите изменённую презентацию в файл PPTX.
// Создать экземпляр презентации
Presentation pres = new Presentation();
try {
// Доступ к слайду
ISlide slide = pres.getSlides().get_Item(0);
// Добавление фигуры SmartArt и узлов
ISmartArt chevron = slide.getShapes().addSmartArt(10, 10, 800, 60, SmartArtLayoutType.ClosedChevronProcess);
ISmartArtNode node = chevron.getAllNodes().addNode();
node.getTextFrame().setText("Some text");
// Установка цвета заливки узла
for (IShape item : node.getShapes())
{
item.getFillFormat().setFillType(FillType.Solid);
item.getFillFormat().getSolidFillColor().setColor(Color.RED);
}
// Сохранить презентацию
pres.save("TestSmart.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Создать миниатюру дочернего узла SmartArt
Разработчики могут создать миниатюру дочернего узла SmartArt, выполнив следующие шаги:
- Создайте экземпляр класса Presentation .
- Add SmartArt .
- Получите ссылку на узел, используя его индекс.
- Получите изображение‑миниатюру.
- Сохраните изображение‑миниатюру в любом желаемом формате изображения.
// Создать экземпляр класса Presentation, представляющего файл PPTX
Presentation pres = new Presentation();
try {
// Добавить SmartArt
ISmartArt smart = pres.getSlides().get_Item(0).getShapes().addSmartArt(10, 10, 400, 300, SmartArtLayoutType.BasicCycle);
// Получить ссылку на узел, используя его индекс
ISmartArtNode node = smart.getNodes().get_Item(1);
// Получить миниатюру
IImage slideImage = node.getShapes().get_Item(0).getImage();
// Сохранить миниатюру
try {
slideImage.save("SmartArt_ChildNote_Thumbnail.png", ImageFormat.Png);
} finally {
if (slideImage != null) slideImage.dispose();
}
} finally {
if (pres != null) pres.dispose();
}
FAQ
Поддерживается ли анимация SmartArt?
Да. SmartArt рассматривается как обычная фигура, поэтому вы можете apply standard animations (вход, выход, подчёркивание, траектории движения) и настроить тайминг. При необходимости можно анимировать фигуры внутри узлов SmartArt.
Как надёжно найти конкретный SmartArt на слайде, если его внутренний ID неизвестен?
Назначьте и ищите по alternative text . Установка отличительного AltText у SmartArt позволяет находить его программно без зависимости от внутренних идентификаторов.
Сохранится ли внешний вид SmartArt при конвертации презентации в PDF?
Да. Aspose.Slides рендерит SmartArt с высокой визуальной точностью при PDF export, сохраняя макет, цвета и эффекты.
Можно ли извлечь изображение всего SmartArt (для превью или отчётов)?
Да. Вы можете рендерить фигуру SmartArt в raster formats или в SVG для масштабируемого векторного вывода, что подходит для миниатюр, отчётов или веб‑использования.

