Hantera SmartArt-formnoder i presentationer med Python
Översikt
SmartArt-grafik i PowerPoint-presentationer organiseras via noder som innehåller text och definierar diagrammets struktur. Aspose.Slides låter dig arbeta med dessa SmartArt‑noder programatiskt: lägga till nya noder och barnnoder, infoga barnnoder på en specifik position, komma åt befintliga noder och läsa deras text, nivå och position.
Denna artikel förklarar hur du hanterar SmartArt‑formnoder. Den visar hur du tar bort noder, arbetar med barnnoder efter index eller position, ändrar en assistentnod till en normal nod, justerar position, storlek och rotation för SmartArt‑nodformer, sätter fyllningsformat för noder och genererar en miniatyrbild för en SmartArt‑barnnod.
Lägg till en SmartArt‑nod
Aspose.Slides for Python via Java tillhandahåller ett API för att hantera SmartArt‑former. Följande exempel lägger till en nod och en barnnod till en SmartArt‑form.
- Skapa en instans av klassen Presentation och ladda presentationen som innehåller en SmartArt‑form.
- Hämta den första bilden efter dess index.
- Iterera genom alla former på den första bilden.
- Kontrollera om formen är en SmartArt‑instans.
- Add a new node till SmartArt‑formens node collection och sätt dess text via TextFrame.
- Add en child node till den nya noden och sätt dess text via TextFrame.
- Spara presentationen.
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()
Lägg till en SmartArt‑nod på en specifik position
Följande exempel lägger till en barnnod på en specifik position i en SmartArt‑nod.
- Skapa en instans av klassen Presentation.
- Hämta den första bilden efter dess index.
- Lägg till en SmartArt‑form med layouten StackedList på bilden.
- Kom åt den första noden i den tillagda SmartArt‑formen.
- Lägg till en barnnod till den valda noden på position 2 med addNodeByPosition och sätt dess text.
- Spara presentationen.
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()
Kom åt en SmartArt‑nod
Följande exempel kommer åt noder i en SmartArt‑form. Layouten som returneras av getLayout är skrivskyddad och sätts när SmartArt‑formen läggs till.
- Skapa en instans av klassen Presentation och ladda presentationen som innehåller en SmartArt‑form.
- Hämta den första bilden efter dess index.
- Iterera genom alla former på den första bilden.
- Kontrollera om formen är en SmartArt‑instans.
- Iterera genom alla nodes i SmartArt‑formen.
- Läs och visa varje SmartArt‑nods position, nivå och text.
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()
Kom åt en SmartArt‑barnnod
Följande exempel kommer åt barnnoderna för varje nod i en SmartArt‑form.
- Skapa en instans av klassen Presentation och ladda presentationen som innehåller en SmartArt‑form.
- Hämta den första bilden efter dess index.
- Iterera genom alla former på den första bilden.
- Kontrollera om formen är en SmartArt‑instans.
- Iterera genom alla nodes i SmartArt‑formen.
- För varje nod, iterera genom dess child nodes.
- Läs och visa child node‑position, nivå och text.
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()
Kom åt en SmartArt‑barnnod på en specifik position
Följande exempel kommer åt en barnnod på ett specifikt index i dess föräldranods samling.
- Skapa en instans av klassen Presentation.
- Hämta den första bilden efter dess index.
- Lägg till en SmartArt‑form med layouten StackedList.
- Kom åt den tillagda SmartArt‑formen.
- Kom åt noden på index 0 i SmartArt‑formen.
- Kom åt barnnoden på index 1 med get_Item.
- Läs och visa child node‑position, nivå och text.
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()
Ta bort en SmartArt‑nod
Följande exempel tar bort en nod från en SmartArt‑form.
- Skapa en instans av klassen Presentation och ladda presentationen som innehåller en SmartArt‑form.
- Hämta den första bilden efter dess index.
- Iterera genom alla former på den första bilden.
- Kontrollera om formen är en SmartArt‑instans.
- Kontrollera att SmartArt‑formen innehåller minst en nod.
- Välj den SmartArt‑nod som ska tas bort.
- Ta bort den valda noden med removeNode.
- Spara presentationen.
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()
Ta bort en SmartArt‑nod från en specifik position
Följande exempel tar bort en barnnod på ett specifikt index i en SmartArt‑nods samling.
- Skapa en instans av klassen Presentation och ladda presentationen som innehåller en SmartArt‑form.
- Hämta den första bilden efter dess index.
- Iterera genom alla former på den första bilden.
- Kontrollera om formen är en SmartArt‑instans.
- Kom åt SmartArt‑noden på index 0 om den finns.
- Kontrollera att den valda SmartArt‑noden har minst två barnnoder.
- Ta bort barnnoden på index 1 med removeNode.
- Spara presentationen.
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()
Ange en anpassad position för en barnnod i ett SmartArt‑objekt
Aspose.Slides for Python via Java stödjer att sätta positionen för en SmartArtShape med setX och setY. Följande exempel anger en anpassad position, storlek och rotation för SmartArt‑nodformer. När nya noder läggs till beräknas positioner och storlekar om för alla noder. Anpassad positionering låter dig ordna noderna som krävs.
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()
Kontrollera en assistentnod
Note
Detta avsnitt utforskar SmartArt‑former som läggs till i presentationsbilder programatiskt med Aspose.Slides for Python via Java.Den följande käll‑SmartArt‑formen används i exemplet.
![]() |
|---|
| Figur: Käll‑SmartArt‑form på en bild |
Följande exempel identifierar assistentnoder i en SmartArt‑nodsamling och ändrar dem till normala noder.
- Skapa en instans av klassen Presentation och ladda presentationen som innehåller en SmartArt‑form.
- Hämta den första bilden efter dess index.
- Iterera genom alla former på den första bilden.
- Kontrollera om formen är en SmartArt‑instans.
- Iterera genom alla noder i SmartArt‑formen och kontrollera om de är Assistant Nodes.
- Ändra varje assistentnod till en normal nod.
- Spara presentationen.
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()
![]() |
|---|
| Figur: Assistentnoder ändrade i en SmartArt‑form på en bild |
Ange en nods fyllningsformat
Aspose.Slides for Python via Java gör det möjligt att lägga till anpassade SmartArt‑former och sätta deras fyllningsformat. Denna artikel förklarar hur du skapar och kommer åt SmartArt‑former samt sätter deras fyllningsformat med Aspose.Slides for Python via Java.
Följ stegen nedan:
- Skapa en instans av klassen Presentation.
- Hämta en bild efter dess index.
- Lägg till en SmartArt‑form med layouten ClosedChevronProcess.
- Sätt FillFormat för SmartArt‑formens noder.
- Skriv den modifierade presentationen som en PPTX‑fil.
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()
Generera en miniatyr av en SmartArt‑barnnod
För att generera en miniatyr av en SmartArt‑barnnod, följ dessa steg:
- Skapa en instans av klassen Presentation.
- Add a SmartArt shape.
- Hämta en nod efter dess index.
- Hämta miniatyrbilden.
- Spara miniatyrbilden i önskat bildformat.
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
Stöds SmartArt‑animation?
Ja. SmartArt behandlas som en vanlig form, så du kan apply standard animations (inkomst, utgång, betoning, rörelsespår) och justera timing. Du kan också animera former inuti SmartArt‑noder vid behov.
Hur kan jag på ett tillförlitligt sätt lokalisera en specifik SmartArt på en bild om dess interna ID är okänt?
Tilldela och sök efter alternative text. Genom att sätta distinkt alternativ text på SmartArt kan du hitta den programatiskt utan att förlita dig på interna identifierare.
Behåller SmartArt sitt utseende när presentationen konverteras till PDF?
Ja. Aspose.Slides renderar SmartArt med hög visuell trohet under PDF export, vilket bevarar layout, färger och effekter.
Kan jag extrahera en bild av hela SmartArt (för förhandsgranskningar eller rapporter)?
Ja. Du kan rendera en SmartArt‑form till raster formats eller till SVG för skalbar vektoroutput, vilket gör den lämplig för miniatyrer, rapporter eller webbbruk.

