Správa uzlů tvarů SmartArt v prezentacích pomocí Pythonu
Přehled
Grafika SmartArt v prezentacích PowerPoint je uspořádána pomocí uzlů, které obsahují text a definují strukturu diagramu. Aspose.Slides vám umožňuje pracovat s těmito uzly SmartArt programově: přidávat nové uzly a poduzly, vkládat poduzly na konkrétní pozici, přistupovat k existujícím uzlům a číst jejich text, úroveň a pozici.
Tento článek vysvětluje, jak spravovat uzly tvarů SmartArt. Ukazuje, jak odebrat uzly, pracovat s poduzly podle indexu nebo pozice, změnit uzel asistenta na běžný uzel, upravit pozici, velikost a otočení tvarů uzlů SmartArt, nastavit výplňové formáty uzlů a vytvořit miniaturu obrázku pro poduzel SmartArt.
Přidat uzel SmartArt
Aspose.Slides pro Python via Java poskytuje rozhraní API pro správu tvarů SmartArt. Následující příklad přidá uzel a poduzel do tvaru SmartArt.
- Vytvořte instanci třídy Presentation a načtěte prezentaci obsahující tvar SmartArt.
- Získejte první snímek podle jeho indexu.
- Procházejte všechny tvary na prvním snímku.
- Zkontrolujte, zda je tvar instance SmartArt.
- Přidejte nový uzel do kolekce uzlů tvaru SmartArt a nastavte jeho text pomocí TextFrame.
- Přidejte poduzel k novému uzlu a nastavte jeho text pomocí TextFrame.
- Uložte prezentaci.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, SmartArt
presentation = Presentation("SimpleSmartArt.pptx")
try:
for shape in presentation.getSlides().get_Item(0).getShapes():
if isinstance(shape, SmartArt):
smart_art = shape
node = smart_art.getAllNodes().addNode()
node.getTextFrame().setText("Test")
child_node = node.getChildNodes().addNode()
child_node.getTextFrame().setText("New Node Added")
presentation.save("AddSmartArtNode.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Přidat uzel SmartArt na konkrétní pozici
Následující příklad přidá poduzel na konkrétní pozici v uzlu SmartArt.
- Vytvořte instanci třídy Presentation.
- Získejte první snímek podle jeho indexu.
- Přidejte tvar SmartArt s rozložením StackedList na snímek.
- Získejte první uzel v přidaném tvaru SmartArt.
- Přidejte poduzel k vybranému uzlu na pozici 2 pomocí addNodeByPosition a nastavte jeho text.
- Uložte prezentaci.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, SmartArtLayoutType
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
smart_art = slide.getShapes().addSmartArt(0, 0, 400, 400, SmartArtLayoutType.StackedList)
node = smart_art.getAllNodes().get_Item(0)
child_node = node.getChildNodes().addNodeByPosition(2)
child_node.getTextFrame().setText("Sample Text Added")
presentation.save("AddSmartArtNodeByPosition.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Přístup k uzlu SmartArt
Následující příklad přistupuje k uzlům ve tvaru SmartArt. Rozložení vrácené metodou getLayout je pouze ke čtení a je nastaveno při přidání tvaru SmartArt.
- Vytvořte instanci třídy Presentation a načtěte prezentaci obsahující tvar SmartArt.
- Získejte první snímek podle jeho indexu.
- Procházejte všechny tvary na prvním snímku.
- Zkontrolujte, zda je tvar instance SmartArt.
- Procházejte všechny uzly ve tvaru SmartArt.
- Přečtěte a zobrazte pozici, úroveň a text každého uzlu SmartArt.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SmartArt
presentation = Presentation("SmartArtShape.pptx")
try:
slide = presentation.getSlides().get_Item(0)
for shape in slide.getShapes():
if isinstance(shape, SmartArt):
smart_art = shape
for i in range(smart_art.getAllNodes().size()):
node = smart_art.getAllNodes().get_Item(i)
print(node.getTextFrame().getText(), " ", node.getLevel(), " ", node.getPosition())
finally:
presentation.dispose()
Přístup k poduzlu SmartArt
Následující příklad přistupuje k poduzlům každého uzlu ve tvaru SmartArt.
- Vytvořte instanci třídy Presentation a načtěte prezentaci obsahující tvar SmartArt.
- Získejte první snímek podle jeho indexu.
- Procházejte všechny tvary na prvním snímku.
- Zkontrolujte, zda je tvar instance SmartArt.
- Procházejte všechny uzly ve tvaru SmartArt.
- Pro každý uzel procházejte jeho child nodes.
- Přečtěte a zobrazte pozici, úroveň a text child node.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SmartArt
presentation = Presentation("AccessChildNodes.pptx")
try:
slide = presentation.getSlides().get_Item(0)
for shape in slide.getShapes():
if isinstance(shape, SmartArt):
smart_art = shape
for i in range(smart_art.getAllNodes().size()):
parent_node = smart_art.getAllNodes().get_Item(i)
for j in range(parent_node.getChildNodes().size()):
node = parent_node.getChildNodes().get_Item(j)
print("j = ", j, ", Text = ", node.getTextFrame().getText(), ", Level = ", node.getLevel(), ", Position = ", node.getPosition())
finally:
presentation.dispose()
Přístup k poduzlu SmartArt na konkrétní pozici
Následující příklad přistupuje k poduzlu na konkrétním indexu v kolekci jeho nadřazeného uzlu.
- Vytvořte instanci třídy Presentation.
- Získejte první snímek podle jeho indexu.
- Přidejte tvar SmartArt s rozložením StackedList.
- Získejte přidaný tvar SmartArt.
- Získejte uzel s indexem 0 v tvaru SmartArt.
- Získejte poduzel s indexem 1 pomocí get_Item.
- Přečtěte a zobrazte pozici, úroveň a text child node.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SmartArtLayoutType
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
smart_art = slide.getShapes().addSmartArt(0, 0, 400, 400, SmartArtLayoutType.StackedList)
node = smart_art.getAllNodes().get_Item(0)
position = 1
child_node = node.getChildNodes().get_Item(position)
print("Text = ", child_node.getTextFrame().getText(), ", Level = ", child_node.getLevel(), ", Position = ", child_node.getPosition())
finally:
presentation.dispose()
Odebrat uzel SmartArt
Následující příklad odebere uzel ze tvaru SmartArt.
- Vytvořte instanci třídy Presentation a načtěte prezentaci obsahující tvar SmartArt.
- Získejte první snímek podle jeho indexu.
- Procházejte všechny tvary na prvním snímku.
- Zkontrolujte, zda je tvar instance SmartArt.
- Zkontrolujte, že tvar [SmartArt] obsahuje alespoň jeden uzel.
- Vyberte uzel SmartArt, který má být smazán.
- Odstraňte vybraný uzel pomocí removeNode.
- Uložte prezentaci.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, SmartArt
presentation = Presentation("AddSmartArtNode.pptx")
try:
for shape in presentation.getSlides().get_Item(0).getShapes():
if isinstance(shape, SmartArt):
smart_art = shape
if smart_art.getAllNodes().size() > 0:
node = smart_art.getAllNodes().get_Item(0)
smart_art.getAllNodes().removeNode(node)
presentation.save("RemoveSmartArtNode.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Odebrat uzel SmartArt z konkrétní pozice
Následující příklad odebere poduzel na konkrétním indexu v kolekci uzlů SmartArt.
- Vytvořte instanci třídy Presentation a načtěte prezentaci obsahující tvar SmartArt.
- Získejte první snímek podle jeho indexu.
- Procházejte všechny tvary na prvním snímku.
- Zkontrolujte, zda je tvar instance SmartArt.
- Získejte uzel SmartArt s indexem 0, pokud existuje.
- Zkontrolujte, že vybraný uzel SmartArt má alespoň dva poduzly.
- Odstraňte poduzel s indexem 1 pomocí removeNode.
- Uložte prezentaci.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, SmartArt
presentation = Presentation("AddSmartArtNode.pptx")
try:
for shape in presentation.getSlides().get_Item(0).getShapes():
if isinstance(shape, SmartArt):
smart_art = shape
if smart_art.getAllNodes().size() > 0:
node = smart_art.getAllNodes().get_Item(0)
if node.getChildNodes().size() >= 2:
node.getChildNodes().removeNode(1)
presentation.save("RemoveSmartArtNodeByPosition.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Nastavit vlastní pozici poduzlu v objektu SmartArt
Aspose.Slides pro Python via Java podporuje nastavení pozice [SmartArtShape] pomocí setX a setY. Následující příklad nastaví vlastní pozici, velikost a rotaci tvarů uzlů SmartArt. Přidání nových uzlů přepočítá pozice a velikosti všech uzlů. Vlastní umístění vám umožní uspořádat uzly podle potřeby.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, SmartArtLayoutType
presentation = Presentation("SimpleSmartArt.pptx")
try:
smart_art = presentation.getSlides().get_Item(0).getShapes().addSmartArt(20, 20, 600, 500, SmartArtLayoutType.OrganizationChart)
node = smart_art.getAllNodes().get_Item(1)
shape = node.getShapes().get_Item(1)
shape.setX(shape.getX() + shape.getWidth() * 2)
shape.setY(shape.getY() - shape.getHeight() * 2)
node = smart_art.getAllNodes().get_Item(2)
shape = node.getShapes().get_Item(1)
shape.setWidth(shape.getWidth() + shape.getWidth() * 2)
node = smart_art.getAllNodes().get_Item(3)
shape = node.getShapes().get_Item(1)
shape.setHeight(shape.getHeight() + shape.getHeight() * 2)
node = smart_art.getAllNodes().get_Item(4)
shape = node.getShapes().get_Item(1)
shape.setRotation(90)
presentation.save("SmartArt.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Zkontrolovat uzel asistenta
Note
Tato část zkoumá tvary SmartArt přidané do snímků prezentace programově pomocí Aspose.Slides pro Python via Java.Následující zdrojový tvar SmartArt je v tomto příkladu použit.
![]() |
|---|
| Figure: Source SmartArt shape on a slide |
Následující příklad identifikuje uzly asistenta v kolekci uzlů SmartArt a změní je na běžné uzly.
- Vytvořte instanci třídy Presentation a načtěte prezentaci obsahující tvar SmartArt.
- Získejte první snímek podle jeho indexu.
- Procházejte všechny tvary na prvním snímku.
- Zkontrolujte, zda je tvar instance SmartArt.
- Procházejte všechny uzly ve tvaru SmartArt a zkontrolujte, zda jsou Assistant Nodes.
- Změňte každý uzel asistenta na běžný uzel.
- Uložte prezentaci.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, SmartArt
presentation = Presentation("AddNodes.pptx")
try:
for shape in presentation.getSlides().get_Item(0).getShapes():
if isinstance(shape, SmartArt):
smart_art = shape
for i in range(smart_art.getAllNodes().size()):
node = smart_art.getAllNodes().get_Item(i)
if node.isAssistant():
node.setAssistant(False)
presentation.save("ChangeAssistantNode.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
![]() |
|---|
| Figure: Assistant nodes changed in a SmartArt shape on a slide |
Nastavit výplňový formát uzlu
Aspose.Slides pro Python via Java umožňuje přidávat vlastní tvary SmartArt a nastavit jejich výplňový formát. Tento článek vysvětluje, jak vytvořit a přistupovat k tvarům SmartArt a nastavit jejich výplň pomocí Aspose.Slides pro Python via Java.
Postupujte podle níže uvedených kroků:
- Vytvořte instanci třídy Presentation.
- Získejte snímek podle jeho indexu.
- Přidejte tvar SmartArt s rozložením ClosedChevronProcess.
- Nastavte FillFormat pro uzly tvaru SmartArt.
- Uložte upravenou prezentaci jako soubor PPTX.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, SmartArtLayoutType, FillType
from java.awt import Color
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
chevron = slide.getShapes().addSmartArt(10, 10, 800, 60, SmartArtLayoutType.ClosedChevronProcess)
node = chevron.getAllNodes().addNode()
node.getTextFrame().setText("Some text")
for item in node.getShapes():
item.getFillFormat().setFillType(FillType.Solid)
item.getFillFormat().getSolidFillColor().setColor(Color.RED)
presentation.save("TestSmart.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Vytvořit miniaturu poduzlu SmartArt
Pro vytvoření miniatury poduzlu SmartArt postupujte podle těchto kroků:
- Vytvořte instanci třídy Presentation.
- Přidejte tvar SmartArt.
- Získejte uzel podle jeho indexu.
- Získejte obrázek miniatury.
- Uložte obrázek miniatury v libovolném požadovaném formátu obrázku.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SmartArtLayoutType, ImageFormat
presentation = Presentation()
try:
smart_art = presentation.getSlides().get_Item(0).getShapes().addSmartArt(10, 10, 400, 300, SmartArtLayoutType.BasicCycle)
node = smart_art.getNodes().get_Item(1)
image = node.getShapes().get_Item(0).getImage()
try:
image.save("SmartArt_ChildNode_Thumbnail.png", ImageFormat.Png)
finally:
image.dispose()
finally:
presentation.dispose()
FAQ
Je podpora animace SmartArt?
Ano. SmartArt je považován za běžný tvar, takže můžete použít standardní animace (vstup, odchod, zvýraznění, pohybové cesty) a upravit načasování. V případě potřeby můžete animovat i tvary uvnitř uzlů SmartArt.
Jak mohu spolehlivě najít konkrétní SmartArt na snímku, pokud je interní ID neznámé?
Přiřaďte a vyhledejte pomocí alternativního textu. Nastavení výrazného alternativního textu u SmartArt vám umožní najít jej programově, aniž byste se spolehli na interní identifikátory.
Zůstane vzhled SmartArt zachován při konverzi prezentace do PDF?
Ano. Aspose.Slides vykresluje SmartArt s vysokou vizuální přesností během exportu do PDF, zachovávají se rozložení, barvy a efekty.
Mohu extrahovat obrázek celého SmartArt (pro náhledy nebo zprávy)?
Ano. Můžete vykreslit tvar SmartArt do rastrových formátů nebo do SVG pro škálovatelný vektorový výstup, což je vhodné pro miniatury, zprávy nebo použití na webu.

