Hantera SmartArt-formnoder i presentationer med Java
Ö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 undernoder, infoga undernoder på en specifik plats, komma åt befintliga noder och läsa deras text, nivå och position.
Denna artikel förklarar hur du hanterar SmartArt‑formnodern. Den visar hur du tar bort noder, arbetar med undernoder efter index eller position, ändrar en assistentnod till en normal nod, justerar position, storlek och rotation av SmartArt‑nodformer, anger nodens fyllningsformat och genererar en miniatyrbild för en SmartArt‑undernod.
Lägg till en SmartArt‑nod
Aspose.Slides för Java har tillhandahållit det enklaste API:et för att hantera SmartArt‑former på det enklaste sättet. Följande exempelkod hjälper dig att lägga till nod och undernod i en SmartArt‑form.
- Skapa en instans av klassen Presentation och öppna presentationen med en SmartArt‑form.
- Hämta referensen till den första bilden genom att använda dess index.
- Gå igenom varje form i den första bilden.
- Kontrollera om formen är av typen SmartArt och typecasta den valda formen till SmartArt om den är SmartArt.
- Lägg till en ny nod i SmartArt‑formen NodeCollection och sätt texten i TextFrame.
- Nu, lägg till en Child Node i den nyåtogda SmartArt‑noden och sätt texten i TextFrame.
- Spara presentationen.
// Ladda den önskade presentationen
Presentation pres = new Presentation("SimpleSmartArt.pptx");
try {
// Gå igenom varje form i den första bilden
for (IShape shape : pres.getSlides().get_Item(0).getShapes())
{
// Kontrollera om formen är av SmartArt-typ
if (shape instanceof SmartArt)
{
// Typecasta formen till SmartArt
SmartArt smart = (SmartArt) shape;
// Lägg till en ny SmartArt-nod
SmartArtNode TemNode = (SmartArtNode) smart.getAllNodes().addNode();
// Lägg till text
TemNode.getTextFrame().setText("Test");
// Lägg till en ny undernod i föräldranoden. Den kommer att läggas till i slutet av samlingen
SmartArtNode newNode = (SmartArtNode) TemNode.getChildNodes().addNode();
// Lägg till text
newNode.getTextFrame().setText("New Node Added");
}
}
// Spara presentationen
pres.save("AddSmartArtNode.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Lägg till en SmartArt‑nod på en specifik position
I följande exempelkod har vi förklarat hur man lägger till undernoder som tillhör respektive noder i en SmartArt‑form på en viss position.
- Skapa en instans av klassen Presentation.
- Hämta referensen till den första bilden genom att använda dess index.
- Lägg till en StackedList-typ SmartArt‑form i den åtkomna bilden.
- Kom åt den första noden i den tillagda SmartArt‑formen.
- Nu, lägg till Child Node för den valda Node på position 2 och sätt dess text.
- Spara presentationen.
// Skapa en presentationsinstans
Presentation pres = new Presentation();
try {
// Åtkomst till presentationsbilden
ISlide slide = pres.getSlides().get_Item(0);
// Lägg till Smart Art IShape
ISmartArt smart = slide.getShapes().addSmartArt(0, 0, 400, 400, SmartArtLayoutType.StackedList);
// Åtkomst till SmartArt-noden på index 0
ISmartArtNode node = smart.getAllNodes().get_Item(0);
// Lägg till ny undernod på position 2 i föräldranoden
SmartArtNode chNode = (SmartArtNode) ((SmartArtNodeCollection) node.getChildNodes()).addNodeByPosition(2);
// Lägg till text
chNode.getTextFrame().setText("Sample Text Added");
// Spara presentationen
pres.save("AddSmartArtNodeByPosition.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Åtkomst till en SmartArt‑nod
Följande exempelkod hjälper dig att komma åt noder i en SmartArt‑form. Observera att du inte kan ändra LayoutType för SmartArt eftersom den är skrivskyddad och endast sätts när SmartArt‑formen läggs till.
- Skapa en instans av klassen Presentation och öppna presentationen med en SmartArt‑form.
- Hämta referensen till den första bilden genom att använda dess index.
- Gå igenom varje form i den första bilden.
- Kontrollera om formen är av typen SmartArt och typecasta den valda formen till SmartArt om den är SmartArt.
- Gå igenom alla Nodes i SmartArt‑formen.
- Kom åt och visa information såsom SmartArt‑nodens position, nivå och text.
// Instansiera Presentation-klass
Presentation pres = new Presentation("SmartArtShape.pptx");
try {
// Hämta första bilden
ISlide slide = pres.getSlides().get_Item(0);
// Gå igenom varje form i den första bilden
for (IShape shape : slide.getShapes())
{
// Kontrollera om formen är av SmartArt-typ
if (shape instanceof ISmartArt)
{
// Typecasta formen till SmartArt
ISmartArt smart = (ISmartArt) shape;
// Gå igenom alla noder i SmartArt
for (int i = 0; i < smart.getAllNodes().size(); i++)
{
// Kom åt SmartArt-nod på index i
SmartArtNode node = (SmartArtNode) smart.getAllNodes().get_Item(i);
// Skriver ut SmartArt-nodens parametrar
System.out.print(node.getTextFrame().getText() + " " + node.getLevel() + " " + node.getPosition());
}
}
}
} finally {
if (pres != null) pres.dispose();
}
Åtkomst till en SmartArt‑undernod
Följande exempelkod hjälper dig att komma åt undernoder som tillhör respektive noder i en SmartArt‑form.
- Skapa en instans av klassen Presentation och öppna presentationen med en SmartArt‑form.
- Hämta referensen till den första bilden genom att använda dess index.
- Gå igenom varje form i den första bilden.
- Kontrollera om formen är av typen SmartArt och typecasta den valda formen till SmartArt om den är SmartArt.
- Gå igenom alla Nodes i SmartArt‑formen.
- För varje vald SmartArt‑form Node, gå igenom alla Child Nodes i den specifika noden.
- Kom åt och visa information såsom Child Node position, nivå och text.
// Instansiera Presentation-klass
Presentation pres = new Presentation("AccessChildNodes.pptx");
try {
// Hämta första bilden
ISlide slide = pres.getSlides().get_Item(0);
// Gå igenom varje form i den första bilden
for (IShape shape : slide.getShapes())
{
// Kontrollera om formen är av SmartArt-typ
if (shape instanceof ISmartArt)
{
// Typecasta formen till SmartArt
ISmartArt smart = (ISmartArt) shape;
// Gå igenom alla noder i SmartArt
for (int i = 0; i < smart.getAllNodes().size(); i++)
{
// Kom åt SmartArt-nod på index i
SmartArtNode node0 = (SmartArtNode) smart.getAllNodes().get_Item(i);
// Gå igenom undernoderna i SmartArt-nod på index i
for (int j = 0; j < node0.getChildNodes().size(); j++)
{
// Kom åt undernoden i SmartArt-nod
SmartArtNode node = (SmartArtNode) node0.getChildNodes().get_Item(j);
// Skriver ut SmartArt-undernodens parametrar
System.out.print("j = " + j + ", Text = " + node.getTextFrame().getText() + ", Level = " + node.getLevel() + ", Position = " + node.getPosition());
}
}
}
}
} finally {
if (pres != null) pres.dispose();
}
Åtkomst till en SmartArt‑undernod på en specifik position
I det här exemplet kommer vi att lära oss att komma åt undernoder på en viss position som tillhör respektive noder i en SmartArt‑form.
- Skapa en instans av klassen Presentation.
- Hämta referensen till den första bilden genom att använda dess index.
- Lägg till en StackedList-typ SmartArt‑form.
- Kom åt den tillagda SmartArt‑formen.
- Kom åt noden med index 0 i den åtkomna SmartArt‑formen.
- Nu, kom åt Child Node på position 1 för den åtkomna SmartArt‑noden med metoden get_Item().
- Kom åt och visa information såsom Child Node position, nivå och text.
// Instansiera presentationen
Presentation pres = new Presentation();
try {
// Åtkomst till den första bilden
ISlide slide = pres.getSlides().get_Item(0);
// Lägger till SmartArt-formen i första bilden
ISmartArt smart = slide.getShapes().addSmartArt(0, 0, 400, 400, SmartArtLayoutType.StackedList);
// Kom åt SmartArt-nod på index 0
ISmartArtNode node = smart.getAllNodes().get_Item(0);
// Kom åt undernoden på position 1 i föräldranoden
int position = 1;
SmartArtNode chNode = (SmartArtNode) ((SmartArtNodeCollection) node.getChildNodes()).get_Item(position);
// Skriver ut SmartArt-undernodens parametrar
System.out.print("Text = " + chNode.getTextFrame().getText() + ", Level = " + chNode.getLevel() + ", Position = " + chNode.getPosition());
} finally {
if (pres != null) pres.dispose();
}
Ta bort en SmartArt‑nod
I detta exempel kommer vi att lära oss att ta bort noder i en SmartArt‑form.
- Skapa en instans av klassen Presentation och öppna presentationen med en SmartArt‑form.
- Hämta referensen till den första bilden genom att använda dess index.
- Gå igenom varje form i den första bilden.
- Kontrollera om formen är av typen SmartArt och typecasta den valda formen till SmartArt om den är SmartArt.
- Kontrollera om SmartArt har fler än 0 noder.
- Välj den SmartArt‑nod som ska raderas.
- Nu, ta bort den valda noden med metoden RemoveNode.
- Spara presentationen.
// Ladda den önskade presentationen
Presentation pres = new Presentation("AddSmartArtNode.pptx");
try {
// Gå igenom varje form i den första bilden
for (IShape shape : pres.getSlides().get_Item(0).getShapes())
{
// Kontrollera om formen är av SmartArt-typ
if (shape instanceof ISmartArt)
{
// Typecasta formen till SmartArt
ISmartArt smart = (ISmartArt) shape;
if (smart.getAllNodes().size() > 0)
{
// Kom åt SmartArt-nod på index 0
ISmartArtNode node = smart.getAllNodes().get_Item(0);
// Tar bort den valda noden
smart.getAllNodes().removeNode(node);
}
}
}
// Spara presentationen
pres.save("RemoveSmartArtNode.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Ta bort en SmartArt‑nod från en specifik position
I detta exempel kommer vi att lära oss att ta bort noder i en SmartArt‑form på en viss position.
- Skapa en instans av klassen Presentation och öppna presentationen med en SmartArt‑form.
- Hämta referensen till den första bilden genom att använda dess index.
- Gå igenom varje form i den första bilden.
- Kontrollera om formen är av typen SmartArt och typecasta den valda formen till SmartArt om den är SmartArt.
- Välj SmartArt‑formnod vid index 0.
- Kontrollera nu om den valda SmartArt‑noden har fler än 2 undernoder.
- Ta nu bort noden på Position 1 med metoden RemoveNode.
- Spara presentationen.
// Ladda den önskade presentationen
Presentation pres = new Presentation("AddSmartArtNode.pptx");
try {
// Gå igenom varje form i den första bilden
for (IShape shape : pres.getSlides().get_Item(0).getShapes())
{
// Kontrollera om formen är av SmartArt-typ
if (shape instanceof SmartArt)
{
// Typecasta formen till SmartArt
SmartArt smart = (SmartArt) shape;
if (smart.getAllNodes().size() > 0)
{
// Kom åt SmartArt-nod på index 0
ISmartArtNode node = smart.getAllNodes().get_Item(0);
if (node.getChildNodes().size() >= 2)
{
// Tar bort undernoden på position 1
(node.getChildNodes()).removeNode(1);
}
}
}
}
// Spara presentationen
pres.save("RemoveSmartArtNodeByPosition.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Ange en anpassad position för en undernod i ett SmartArt‑objekt
Nu har Aspose.Slides för Java stöd för att sätta egenskaperna SmartArtShape X och Y. Kodsnutten nedan visar hur man anger anpassad position, storlek och rotation för SmartArtShape; observera också att tillägg av nya noder orsakar en omräkning av alla noders positioner och storlekar. Med anpassade positionsinställningar kan användaren sätta noderna enligt krav.
// Instansiera Presentation-klass
Presentation pres = new Presentation("SimpleSmartArt.pptx");
try{
ISmartArt smart = pres.getSlides().get_Item(0).getShapes().addSmartArt(20, 20, 600, 500, SmartArtLayoutType.OrganizationChart);
// Flytta SmartArt-formen till ny position
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);
// Ändra SmartArt-formens bredd
node = smart.getAllNodes().get_Item(2);
shape = node.getShapes().get_Item(1);
shape.setWidth(shape.getWidth() + shape.getWidth() * 2);
// Ändra SmartArt-formens höjd
node = smart.getAllNodes().get_Item(3);
shape = node.getShapes().get_Item(1);
shape.setHeight(shape.getHeight() + shape.getHeight() * 2);
// Ändra SmartArt-formens rotation
node = smart.getAllNodes().get_Item(4);
shape = node.getShapes().get_Item(1);
shape.setRotation(90);
pres.save("SmartArt.pptx", SaveFormat.Pptx);
}finally {
pres.dispose();
}
Kontrollera en assistentnod
Vi kommer att använda följande käll‑SmartArt‑form för vår undersökning i olika avsnitt av den här artikeln.
![]() |
|---|
| Figur: Källa SmartArt‑form i bild |
I följande exempelkod kommer vi att undersöka hur man identifierar Assistant Nodes i samlingen av SmartArt‑noder och ändrar dem.
- Skapa en instans av klassen Presentation och öppna presentationen med en SmartArt‑form.
- Hämta referensen till den andra bilden genom att använda dess index.
- Gå igenom varje form i den första bilden.
- Kontrollera om formen är av typen SmartArt och typecasta den valda formen till SmartArt om den är SmartArt.
- Gå igenom alla noder i SmartArt‑formen och kontrollera om de är Assistant Nodes.
- Ändra statusen för Assistant Node till en normal nod.
- Spara presentationen.
// Skapar en presentationsinstans
Presentation pres = new Presentation("AddNodes.pptx");
try {
// Gå igenom varje form i den första bilden
for (IShape shape : pres.getSlides().get_Item(0).getShapes())
{
// Kontrollera om formen är av SmartArt-typ
if (shape instanceof ISmartArt)
{
// Typecasta formen till SmartArt
ISmartArt smart = (SmartArt) shape;
// Gå igenom alla noder i SmartArt-formen
for (int i = 0; i < smart.getAllNodes().size(); i++)
{
ISmartArtNode node = smart.getAllNodes().get_Item(i);
// Kontrollera om noden är en assistentnod
if (node.isAssistant())
{
// Sätter assistentnod till false och gör den till en normal nod
node.isAssistant();
}
}
}
}
// Spara presentationen
pres.save("ChangeAssitantNode.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
![]() |
|---|
| Figur: Assistentnoder ändrade i SmartArt‑form i bild |
Ange en nods fyllningsformat
Aspose.Slides för Java möjliggör att lägga till anpassade SmartArt‑former och ange deras fyllningsformat. Denna artikel förklarar hur du skapar och får åtkomst till SmartArt‑former samt sätter deras fyllningsformat med Aspose.Slides för Java.
Följ stegen nedan:
- Skapa en instans av klassen Presentation.
- Hämta referensen till en bild med dess index.
- Lägg till en SmartArt‑form genom att ange dess LayoutType.
- Ange FillFormat för SmartArt‑formens noder.
- Spara den modifierade presentationen som en PPTX‑fil.
// Instansiera presentationen
Presentation pres = new Presentation();
try {
// Åtkomst till bilden
ISlide slide = pres.getSlides().get_Item(0);
// Lägger till SmartArt-form och noder
ISmartArt chevron = slide.getShapes().addSmartArt(10, 10, 800, 60, SmartArtLayoutType.ClosedChevronProcess);
ISmartArtNode node = chevron.getAllNodes().addNode();
node.getTextFrame().setText("Some text");
// Ställer in nodens fyllningsfärg
for (IShape item : node.getShapes())
{
item.getFillFormat().setFillType(FillType.Solid);
item.getFillFormat().getSolidFillColor().setColor(Color.RED);
}
// Spara presentationen
pres.save("TestSmart.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Generera en miniatyr av en SmartArt‑undernod
Utvecklare kan generera en miniatyr av en Child node i en SmartArt genom att följa stegen nedan:
- Skapa en instans av klassen Presentation.
- Lägg till SmartArt.
- Hämta referensen till en nod genom att använda dess index.
- Hämta miniatyrbilden.
- Spara miniatyrbilden i önskat bildformat.
// Instansiera Presentation-klass som representerar PPTX-filen
Presentation pres = new Presentation();
try {
// Lägg till SmartArt
ISmartArt smart = pres.getSlides().get_Item(0).getShapes().addSmartArt(10, 10, 400, 300, SmartArtLayoutType.BasicCycle);
// Hämta referensen till en nod genom att använda dess index
ISmartArtNode node = smart.getNodes().get_Item(1);
// Hämta miniatyrbild
IImage slideImage = node.getShapes().get_Item(0).getImage();
// Spara miniatyrbild
try {
slideImage.save("SmartArt_ChildNote_Thumbnail.png", ImageFormat.Png);
} finally {
if (slideImage != null) slideImage.dispose();
}
} finally {
if (pres != null) pres.dispose();
}
FAQ
Stöds SmartArt‑animation?
Ja. SmartArt behandlas som en vanlig form, så du kan tillämpa standardanimationer (ingång, utgång, betoning, rörelsebanor) och justera tidpunkter. Du kan även animera former i SmartArt‑noder vid behov.
Hur kan jag på ett tillförlitligt sätt hitta en specifik SmartArt på en bild om dess interna ID är okänt?
Tilldela och sök via alternativ text. Genom att sätta en distinkt AltText på SmartArt kan du hitta den programatiskt utan att förlita dig på interna identifierare.
Kommer SmartArt‑utseendet att bevaras vid konvertering av presentationen 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örhandsvisningar eller rapporter)?
Ja. Du kan rendera en SmartArt‑form till rasterformat eller till SVG för skalbar vektorutdata, vilket gör den lämplig för miniatyrer, rapporter eller webbbruk.

