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.

  1. Vytvořte instanci třídy Presentation a načtěte prezentaci obsahující tvar SmartArt.
  2. Získejte první snímek podle jeho indexu.
  3. Procházejte všechny tvary na prvním snímku.
  4. Zkontrolujte, zda je tvar instance SmartArt.
  5. Přidejte nový uzel do kolekce uzlů tvaru SmartArt a nastavte jeho text pomocí TextFrame.
  6. Přidejte poduzel k novému uzlu a nastavte jeho text pomocí TextFrame.
  7. 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.

  1. Vytvořte instanci třídy Presentation.
  2. Získejte první snímek podle jeho indexu.
  3. Přidejte tvar SmartArt s rozložením StackedList na snímek.
  4. Získejte první uzel v přidaném tvaru SmartArt.
  5. Přidejte poduzel k vybranému uzlu na pozici 2 pomocí addNodeByPosition a nastavte jeho text.
  6. 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.

  1. Vytvořte instanci třídy Presentation a načtěte prezentaci obsahující tvar SmartArt.
  2. Získejte první snímek podle jeho indexu.
  3. Procházejte všechny tvary na prvním snímku.
  4. Zkontrolujte, zda je tvar instance SmartArt.
  5. Procházejte všechny uzly ve tvaru SmartArt.
  6. 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.

  1. Vytvořte instanci třídy Presentation a načtěte prezentaci obsahující tvar SmartArt.
  2. Získejte první snímek podle jeho indexu.
  3. Procházejte všechny tvary na prvním snímku.
  4. Zkontrolujte, zda je tvar instance SmartArt.
  5. Procházejte všechny uzly ve tvaru SmartArt.
  6. Pro každý uzel procházejte jeho child nodes.
  7. 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.

  1. Vytvořte instanci třídy Presentation.
  2. Získejte první snímek podle jeho indexu.
  3. Přidejte tvar SmartArt s rozložením StackedList.
  4. Získejte přidaný tvar SmartArt.
  5. Získejte uzel s indexem 0 v tvaru SmartArt.
  6. Získejte poduzel s indexem 1 pomocí get_Item.
  7. 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.

  1. Vytvořte instanci třídy Presentation a načtěte prezentaci obsahující tvar SmartArt.
  2. Získejte první snímek podle jeho indexu.
  3. Procházejte všechny tvary na prvním snímku.
  4. Zkontrolujte, zda je tvar instance SmartArt.
  5. Zkontrolujte, že tvar [SmartArt] obsahuje alespoň jeden uzel.
  6. Vyberte uzel SmartArt, který má být smazán.
  7. Odstraňte vybraný uzel pomocí removeNode.
  8. 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.

  1. Vytvořte instanci třídy Presentation a načtěte prezentaci obsahující tvar SmartArt.
  2. Získejte první snímek podle jeho indexu.
  3. Procházejte všechny tvary na prvním snímku.
  4. Zkontrolujte, zda je tvar instance SmartArt.
  5. Získejte uzel SmartArt s indexem 0, pokud existuje.
  6. Zkontrolujte, že vybraný uzel SmartArt má alespoň dva poduzly.
  7. Odstraňte poduzel s indexem 1 pomocí removeNode.
  8. 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

Následující zdrojový tvar SmartArt je v tomto příkladu použit.

SmartArt shape
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.

  1. Vytvořte instanci třídy Presentation a načtěte prezentaci obsahující tvar SmartArt.
  2. Získejte první snímek podle jeho indexu.
  3. Procházejte všechny tvary na prvním snímku.
  4. Zkontrolujte, zda je tvar instance SmartArt.
  5. Procházejte všechny uzly ve tvaru SmartArt a zkontrolujte, zda jsou Assistant Nodes.
  6. Změňte každý uzel asistenta na běžný uzel.
  7. 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()
SmartArt shape
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ů:

  1. Vytvořte instanci třídy Presentation.
  2. Získejte snímek podle jeho indexu.
  3. Přidejte tvar SmartArt s rozložením ClosedChevronProcess.
  4. Nastavte FillFormat pro uzly tvaru SmartArt.
  5. 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ů:

  1. Vytvořte instanci třídy Presentation.
  2. Přidejte tvar SmartArt.
  3. Získejte uzel podle jeho indexu.
  4. Získejte obrázek miniatury.
  5. 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.