使用 JavaScript 在 PowerPoint 簡報中管理 SmartArt

概觀

SmartArt 是由節點、節點形狀和版面配置所組成的 PowerPoint 圖表。使用 Aspose.Slides for Node.js via Java,您可以建立 SmartArt、從其節點讀取文字、變更版面配置、檢查隱藏節點、設定組織圖版面,以及建立圖片組織圖。

從 SmartArt 物件取得文字

SmartArt 節點可以包含一個或多個形狀。若要從節點形狀讀取文字,請遍歷 SmartArt.getAllNodes,然後讀取由 SmartArtShape.getTextFrame 回傳的 TextFrame。

此範例需要一個至少包含一張投影片且在該投影片上第一個形狀為 SmartArt 物件的簡報。它會將每個可用的文字框輸出至主控台。

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
const java = require("java");

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());
                }
            }
        }
    } else {
        console.log("The first shape is not a SmartArt object.");
    }
} finally {
    presentation.dispose();
}

變更 SmartArt 物件的版面配置類型

SmartArt 的版面配置決定節點的排列與連接方式。以下範例使用 SmartArtLayoutType 的 BasicBlockList 值建立 SmartArt 物件,將其變更為 BasicProcess 值,並儲存簡報。傳遞給 ShapeCollection.addSmartArt 的位置和大小以點為單位。使用 SmartArt.setLayout 來變更版面配置。

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");

let presentation = new aspose.slides.Presentation();
try {
    let slide = presentation.getSlides().get_Item(0);

    let smartArt = slide.getShapes().addSmartArt(10, 10, 400, 300, aspose.slides.SmartArtLayoutType.BasicBlockList);
    smartArt.setLayout(aspose.slides.SmartArtLayoutType.BasicProcess);

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

檢查 SmartArt 節點是否為隱藏

SmartArtNode.isHidden 表示此節點在 SmartArt 資料模型中是否為隱藏狀態。即使所選的版面配置未將它們顯示為可見圖表元素,隱藏節點仍可能存在於結構中。

以下範例向使用 SmartArtLayoutType RadialCycle 值的 SmartArt 物件新增一個節點,並檢查新增節點的隱藏狀態。若節點為隱藏,會輸出訊息並儲存圖表。

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");

let presentation = new aspose.slides.Presentation();
try {
    let slide = presentation.getSlides().get_Item(0);

    let smartArt = slide.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.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

取得或設定組織圖版面配置

對於使用組織圖版面配置的 SmartArt 圖表,SmartArtNode.getOrganizationChartLayout 與 SmartArtNode.setOrganizationChartLayout 定義子節點在父節點下的排列方式。例如,您可以根據所選的 OrganizationChartLayoutType 將子節點掛在左側、右側或兩側。

以下範例建立組織圖,並將第一個節點的版面配置設定為 OrganizationChartLayoutType LeftHanging 值。零基索引 0 代表第一個頂層節點;其子節點會使用所選的排列方式。最後儲存修改後的簡報。

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");

let presentation = new aspose.slides.Presentation();
try {
    let slide = presentation.getSlides().get_Item(0);

    let smartArt = slide.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.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

建立圖片組織圖

圖片組織圖是一種為包含圖片佔位符的階層圖表設計的 SmartArt 版面配置。將 SmartArt 物件加入投影片時,使用 SmartArtLayoutType PictureOrganizationChart 值。本範例儲存帶有圖片佔位符的圖表;不會將圖片填入佔位符。

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");

let presentation = new aspose.slides.Presentation();
try {
    let slide = presentation.getSlides().get_Item(0);

    let smartArt = slide.getShapes().addSmartArt(0, 0, 400, 400, aspose.slides.SmartArtLayoutType.PictureOrganizationChart);

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

將舊版圖表轉換為形狀群組

在升級現有簡報時,您可能需要更新最初在 PowerPoint 97–2003 建立的組織圖。Aspose.Slides 將這些舊版圖表表示為 LegacyDiagram 物件。使用 LegacyDiagram.convertToGroupShape 可將圖表轉換為形狀群組,以便編輯各個視覺元素。詳情請參閱 LegacyDiagram API Reference。

轉換會在形狀集合中新增一個群組,而不會移除原始圖表。轉換成功後,使用 ShapeCollection.remove 移除原始圖表,以避免重複內容。於轉換前先將舊版圖表收集至清單中,避免在新增或移除形狀時中斷迭代。

以下範例開啟簡報,搜尋每張投影片,將圖表轉換為形狀群組,並將更新後的簡報儲存為 PPTX。

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
const java = require("java");

let presentation = new aspose.slides.Presentation("legacy-diagrams.ppt");
try {
    let slides = presentation.getSlides();
    for (let slideIndex = 0; slideIndex < slides.size(); slideIndex++) {
        let slide = slides.get_Item(slideIndex);
        let shapes = slide.getShapes();
        let legacyDiagrams = [];
        for (let shapeIndex = 0; shapeIndex < shapes.size(); shapeIndex++) {
            let shape = shapes.get_Item(shapeIndex);
            if (java.instanceOf(shape, "com.aspose.slides.ILegacyDiagram")) {
                legacyDiagrams.push(shape);
            }
        }

        for (let legacyDiagram of legacyDiagrams) {
            let groupShape = legacyDiagram.convertToGroupShape();

            if (groupShape != null) {
                shapes.remove(legacyDiagram);
            }
        }
    }

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

儲存的簡報會以可編輯的形狀群組取代已轉換的舊版圖表,且不會留下原始圖表。於 PowerPoint 中開啟 PPTX,即可編輯每個群組內的個別元素,如文字、填色或位置。

FAQ

SmartArt 是否支援針對 RTL 語言的鏡像或反轉?

是。當所選的 SmartArt 版面配置支援反轉時,SmartArt.setReversed 方法會將圖表方向由左至右切換為右至左,或反向切換。

如何在保留格式的情況下,將 SmartArt 複製到同一張投影片或其他簡報中?

您可以克隆 SmartArt 形狀,使用 ShapeCollection.addClone 或克隆整張投影片 包含 SmartArt 的投影片。兩種方式皆可保留大小、位置與格式。

如何將 SmartArt 轉換為點陣圖供預覽或網路匯出?

轉換投影片或將整個簡報轉換為 PNG 或 JPEG。SmartArt 會作為投影片的一部分被轉換。

如果投影片上有多個 SmartArt 物件,如何找到特定的 SmartArt 物件?

使用 Shape.setAlternativeText 或 Shape.setName 為 SmartArt 形狀指派獨特的替代文字或名稱,於 BaseSlide.getShapes 中搜尋該值,然後檢查匹配的形狀是否為 SmartArt.