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

Обзор

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

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

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

let presentation = new aspose.slides.Presentation("sample.pptx");
try {
    let slide = presentation.getSlides().get_Item(0);
    let shape = slide.getShapes().get_Item(0);

    if (java.instanceOf(shape, "com.aspose.slides.ISmartArt")) {
        let smartArt = shape;
        let nodes = smartArt.getAllNodes();

        for (let nodeIndex = 0; nodeIndex < nodes.size(); nodeIndex++) {
            let node = nodes.get_Item(nodeIndex);
            let nodeShapes = node.getShapes();

            for (let shapeIndex = 0; shapeIndex < nodeShapes.size(); shapeIndex++) {
                let nodeShape = nodeShapes.get_Item(shapeIndex);

                if (nodeShape.getTextFrame() != null) {
                    console.log(nodeShape.getTextFrame().getText());
                }
            }
        }
    }
} finally {
    presentation.dispose();
}

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

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

let presentation = new aspose.slides.Presentation();
try {
    let smartArt = presentation.getSlides().get_Item(0).getShapes().addSmartArt(
        10, 10, 400, 300, aspose.slides.SmartArtLayoutType.BasicBlockList);

    smartArt.setLayout(aspose.slides.SmartArtLayoutType.BasicProcess);

    presentation.save("ChangeSmartArtLayout_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

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

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

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

let presentation = new aspose.slides.Presentation();
try {
    let smartArt = presentation.getSlides().get_Item(0).getShapes().addSmartArt(
        10, 10, 400, 300, aspose.slides.SmartArtLayoutType.RadialCycle);

    let node = smartArt.getAllNodes().addNode();
    let isHidden = node.isHidden();

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

    presentation.save("CheckSmartArtHiddenProperty_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

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

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

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

let presentation = new aspose.slides.Presentation();
try {
    let smartArt = presentation.getSlides().get_Item(0).getShapes().addSmartArt(
        10, 10, 400, 300, aspose.slides.SmartArtLayoutType.OrganizationChart);

    let rootNode = smartArt.getNodes().get_Item(0);
    rootNode.setOrganizationChartLayout(aspose.slides.OrganizationChartLayoutType.LeftHanging);

    presentation.save("OrganizationChartLayout_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Создание организационной диаграммы с изображением

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

let presentation = new aspose.slides.Presentation();
try {
    let smartArt = presentation.getSlides().get_Item(0).getShapes().addSmartArt(
        0, 0, 400, 400, aspose.slides.SmartArtLayoutType.PictureOrganizationChart);

    presentation.save("PictureOrganizationChart_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

FAQ

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

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

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

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

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

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

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

Установите отличительное значение с помощью Shape.setAlternativeText или Shape.setName для формы SmartArt, выполните поиск этого значения в BaseSlide.getShapes и затем проверьте, что найденная форма является SmartArt.