Spravovat SmartArt v prezentacích PowerPoint pomocí Pythonu
Přehled
SmartArt je diagram PowerPointu vytvořený z uzlů, tvarů uzlů a rozvržení. S Aspose.Slides pro Python přes Java můžete vytvářet SmartArt, číst text z jeho uzlů, měnit jeho rozvržení, kontrolovat skryté uzly, konfigurovat rozvržení organizačních diagramů a vytvářet obrázkové organizační diagramy.
Získání textu z objektu SmartArt
Uzlu SmartArt může obsahovat jeden nebo více tvarů. Chcete‑li přečíst text z tvarů uzlu, projděte SmartArt.getAllNodes, poté přečtěte TextFrame vrácený metodou SmartArtShape.getTextFrame.
Příklad vyžaduje prezentaci s alespoň jedním snímkem a objektem SmartArt jako prvním tvarem na tomto snímku. Vypíše každý dostupný textový rámec do konzole.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SmartArt
presentation = Presentation("sample.pptx")
try:
slide = presentation.getSlides().get_Item(0)
shape = slide.getShapes().get_Item(0)
if isinstance(shape, SmartArt):
smart_art = shape
for node in smart_art.getAllNodes():
for node_shape in node.getShapes():
if node_shape.getTextFrame() is not None:
print(node_shape.getTextFrame().getText())
finally:
presentation.dispose()
Změna typu rozvržení objektu SmartArt
Rozvržení SmartArt určuje, jak jsou uzly uspořádány a propojeny. Následující příklad vytvoří objekt SmartArt s hodnotou SmartArtLayoutType BasicBlockList, změní jej na hodnotu BasicProcess a uloží prezentaci. Pozice a velikost předávané metodě ShapeCollection.addSmartArt jsou měřeny v bodech. K změně rozvržení použijte SmartArt.setLayout.
import jpade
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(10, 10, 400, 300, SmartArtLayoutType.BasicBlockList)
smart_art.setLayout(SmartArtLayoutType.BasicProcess)
presentation.save("ChangeSmartArtLayout.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Kontrola, zda je uzel SmartArt skrytý
SmartArtNode.isHidden udává, zda je uzel skrytý v datovém modelu SmartArt. Skryté uzly mohou ve struktuře existovat i tehdy, když vybrané rozvržení nezobrazuje je jako viditelné prvky diagramu.
Následující příklad přidá uzel do objektu SmartArt, který používá hodnotu SmartArtLayoutType RadialCycle, a zkontroluje stav skrytí přidaného uzlu. Vytiskne zprávu, pokud je uzel skrytý, a uloží diagram.
import jpype
import asposeslides
if not jpade.isJVMStarted():
jpade.startJVM()
from asposeslides.api import Presentation, SaveFormat, SmartArtLayoutType
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
smart_art = slide.getShapes().addSmartArt(10, 10, 400, 300, SmartArtLayoutType.RadialCycle)
node = smart_art.getAllNodes().addNode()
is_hidden = node.isHidden()
if is_hidden:
print("The node is hidden in the SmartArt data model.")
presentation.save("CheckSmartArtHiddenProperty.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Získání nebo nastavení rozvržení organizačního diagramu
Pro diagramy SmartArt, které používají rozvržení organizačního diagramu, SmartArtNode.getOrganizationChartLayout a SmartArtNode.setOrganizationChartLayout určují, jak jsou podřízené uzly uspořádány pod nadřazeným uzlem. Například můžete nastavit podřízené uzly tak, aby visely zleva, zprava nebo z obou stran, v závislosti na vybraném OrganizationChartLayoutType.
Následující příklad vytvoří organizační diagram a nastaví rozvržení pro první uzel na hodnotu OrganizationChartLayoutType LeftHanging. Index 0 (nulová báze) vybírá první uzel nejvyšší úrovně; jeho podřízené uzly použijí vybranou úpravu. Upravená prezentace je pak uložena.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import OrganizationChartLayoutType, Presentation, SaveFormat, SmartArtLayoutType
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
smart_art = slide.getShapes().addSmartArt(10, 10, 400, 300, SmartArtLayoutType.OrganizationChart)
root_node = smart_art.getNodes().get_Item(0)
root_node.setOrganizationChartLayout(OrganizationChartLayoutType.LeftHanging)
presentation.save("OrganizationChartLayout.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Vytvoření obrázkového organizačního diagramu
Obrázkový organizační diagram je rozvržení SmartArt navržené pro hierarchické diagramy, které obsahují zástupné obrázky. Při přidávání objektu SmartArt na snímek použijte hodnotu SmartArtLayoutType PictureOrganizationChart. Tento příklad uloží diagram se zástupnými obrázky; nezaplní však zástupce obrázky.
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.PictureOrganizationChart)
presentation.save("PictureOrganizationChart.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Převod starých diagramů na skupiny tvarů
Při modernizaci existující prezentace může být nutné aktualizovat organizační diagram původně vytvořený v PowerPointu 97-2003. Aspose.Slides představuje tyto staré diagramy jako objekty LegacyDiagram. Použijte LegacyDiagram.convertToGroupShape k převodu diagramu na skupinu tvarů, abyste mohli upravovat jednotlivé vizuální prvky. Viz LegacyDiagram API Reference pro podrobnosti.
Převod přidá novou skupinu do kolekce tvarů, aniž by odstranil původní diagram. Po úspěšném převodu odstraňte původní diagram pomocí ShapeCollection.remove, abyste předešli duplicitnímu obsahu. Shromážděte staré diagramy do seznamu před jejich převodem, aby přidávání a odebírání tvarů nerušilo iteraci.
Následující příklad otevře prezentaci, prohledá každý snímek, převádí diagramy na skupiny tvarů a uloží aktualizovanou prezentaci jako PPTX.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import LegacyDiagram, Presentation, SaveFormat
presentation = Presentation("legacy-diagrams.ppt")
try:
for slide in presentation.getSlides():
legacy_diagrams = []
for shape in slide.getShapes():
if isinstance(shape, LegacyDiagram):
legacy_diagrams.append(shape)
for legacy_diagram in legacy_diagrams:
group_shape = legacy_diagram.convertToGroupShape()
if group_shape is not None:
slide.getShapes().remove(legacy_diagram)
presentation.save("modernized.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Uložená prezentace obsahuje editovatelné skupiny tvarů místo převedených starých diagramů, bez původních diagramů zůstávajících vedle nich. Otevřete PPTX v PowerPointu a upravte jednotlivé prvky v každé skupině, například jejich text, výplň nebo pozici.
Časté dotazy
Podporuje SmartArt zrcadlení nebo obrácení pro RTL jazyky?
Ano. Metoda SmartArt.setReversed přepíná směr diagramu z zleva‑doprava na zprava‑doleva, nebo zpět, pokud vybrané rozvržení SmartArt podporuje obrácení.
Jak mohu zkopírovat SmartArt na stejný snímek nebo do jiné prezentace při zachování formátování?
Můžete klonovat tvar SmartArt pomocí ShapeCollection.addClone nebo klonovat celý snímek obsahující SmartArt. Oba přístupy zachovávají velikost, pozici a formátování.
Jak mohu vykreslit SmartArt do rastrového obrázku pro náhled nebo webový export?
Vykreslete snímek nebo celou prezentaci do PNG nebo JPEG. SmartArt je vykreslen jako součást snímku.
Jak mohu najít konkrétní objekt SmartArt na snímku, pokud jich je několik?
Použijte Shape.setAlternativeText nebo Shape.setName k přiřazení jedinečného alternativního textu nebo názvu tvaru SmartArt, vyhledejte tuto hodnotu v BaseSlide.getShapes a poté ověřte, že odpovídající tvar je SmartArt.