在 Android 上管理簡報中的 SmartArt 形狀節點
概觀
PowerPoint 簡報中的 SmartArt 圖形透過包含文字的節點來組織,並定義圖表的結構。Aspose.Slides 允許您以程式方式操作這些 SmartArt 節點:新增節點與子節點、在特定位置插入子節點、存取現有節點,以及讀取它們的文字、層級與位置。
本文件說明如何管理 SmartArt 形狀節點。它展示了如何移除節點、依索引或位置處理子節點、將助理節點變更為普通節點、調整 SmartArt 節點形狀的位置、大小與旋轉、設定節點的填充格式,以及為 SmartArt 子節點產生縮圖。
新增 SmartArt 節點
Aspose.Slides for Android via Java 提供了最簡易的 API,以最簡單的方式管理 SmartArt 形狀。以下範例程式碼說明如何在 SmartArt 形狀中新增節點與子節點。
- 建立 Presentation 類別的執行個體,並載入含有 SmartArt 形狀的簡報。
- 使用索引取得第一張投影片的參照。
- 遍歷第一張投影片內的所有形狀。
- 檢查形狀是否為 SmartArt 型別,如果是,則將選取的形狀型別轉換為 SmartArt。
- 在 SmartArt 形狀的 NodeCollection 中 新增節點,並在 TextFrame 中設定文字。
- 現在,在新加入的 SmartArt 節點中 新增 一個 Child Node,並在 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 形狀中的第一個節點。
- 現在,於位置 2 為選取的 Node 新增 Child Node,並設定其文字。
- 儲存簡報
// 建立簡報實例
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);
// 取得索引為 0 的 SmartArt 節點
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 形狀內的節點。請注意,SmartArt 的 LayoutType 為唯讀,僅在加入 SmartArt 形狀時設定,無法更改。
- 建立 Presentation 類別的執行個體,並載入含有 SmartArt 形狀的簡報。
- 使用索引取得第一張投影片的參照。
- 遍歷第一張投影片內的所有形狀。
- 檢查形狀是否為 SmartArt 型別,如果是,則將選取的形狀型別轉換為 SmartArt。
- 遍歷 SmartArt 形狀內的所有 Nodes。
- 存取並顯示 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++)
{
// 取得索引 i 的 SmartArt 節點
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 形狀 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++)
{
// 取得索引 i 的 SmartArt 節點
SmartArtNode node0 = (SmartArtNode) smart.getAllNodes().get_Item(i);
// 遍歷索引 i 的 SmartArt 節點中的子節點
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 形狀。
- 取得該 SmartArt 形狀中索引為 0 的節點。
- 現在,使用 get_Item() 方法存取該 SmartArt 節點中位置為 1 的 Child Node。
- 存取並顯示 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);
// 取得索引為 0 的 SmartArt 節點
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 是否包含超過 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)
{
// 取得索引為 0 的 SmartArt 節點
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。
- 選取索引為 0 的 SmartArt 形狀節點。
- 現在,檢查選取的 SmartArt 節點是否有超過 2 個子節點。
- 現在,使用 RemoveNode 方法移除 Position 1 的節點。
- 儲存簡報。
// 載入所需的簡報
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)
{
// 取得索引為 0 的 SmartArt 節點
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 Android via 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 形狀進行測試。
![]() |
|---|
| 圖示:投影片中的來源 SmartArt 形狀 |
以下範例程式碼說明如何在 SmartArt 節點集合中辨識 Assistant Nodes,並對其進行變更。
- 建立 Presentation 類別的執行個體,並載入含有 SmartArt 形狀的簡報。
- 使用索引取得第二張投影片的參照。
- 遍歷第一張投影片內的所有形狀。
- 檢查形狀是否為 SmartArt 型別,如果是,則將選取的形狀型別轉換為 SmartArt。
- 遍歷 SmartArt 形狀內的所有節點,並檢查它們是否為 Assistant Nodes。
- 將 Assistant Node 的狀態變更為普通節點。
- 儲存簡報。
// 建立簡報實例
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();
}
![]() |
|---|
| 圖示:投影片中 SmartArt 形狀的助理節點已變更 |
設定節點的填充格式
Aspose.Slides for Android via Java 可讓您新增自訂 SmartArt 形狀並設定其填充格式。本文件說明如何建立與存取 SmartArt 形狀,以及使用 Aspose.Slides for Android via Java 設定其填充格式。
請依照以下步驟操作:
- 建立 Presentation 類別的執行個體。
- 使用索引取得投影片的參照。
- 設定其 LayoutType 以新增一個 SmartArt 形狀。
- 為 SmartArt 形狀的節點設定 FillFormat。
- 將修改後的簡報寫入為 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 類別的執行個體。
- 新增 SmartArt。
- 使用索引取得節點的參照。
- 取得縮圖影像。
- 將縮圖以任意影像格式儲存。
// 建立代表 PPTX 檔案的 Presentation 類別實例
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 被視為一般形狀,您可以 套用標準動畫(進入、退出、強調、移動路徑)並調整時間。必要時,也可對 SmartArt 節點內的形狀套用動畫。
如果不知道內部 ID,如何可靠地在投影片上定位特定 SmartArt?
透過指派與搜尋 alternative text 來定位。為 SmartArt 設定唯一的 AltText,就能在程式中找出它,而不必依賴內部識別碼。
將簡報轉換為 PDF 時,SmartArt 的外觀會被保留嗎?
會。Aspose.Slides 在 PDF 匯出 時以高視覺保真度呈現 SmartArt,保留佈局、顏色與效果。
我可以擷取整個 SmartArt 的影像(用於預覽或報告)嗎?
可以。您可以將 SmartArt 形狀轉為 raster formats 或 SVG 以取得可縮放的向量輸出,適用於縮圖、報告或網站使用。

