SmartArt kezelése PowerPoint prezentációkban Python használatával

Áttekintés

A SmartArt egy PowerPoint diagram, amely csomópontokból, csomópont alakzatokból és egy elrendezésből áll. Az Aspose.Slides for Python via Java-val létrehozhat SmartArt-ot, olvashat szöveget a csomópontjairól, módosíthatja az elrendezését, ellenőrizheti a rejtett csomópontokat, konfigurálhatja a szervezeti diagram elrendezéseket, és létrehozhat képes szervezeti diagramokat.

Szöveg lekérése SmartArt objektumból

Egy SmartArt csomópont egy vagy több alakzatot tartalmazhat. A csomópont alakzatok szövegének olvasásához iteráljon a SmartArt.getAllNodes, majd olvassa el a TextFrame által visszaadott SmartArtShape.getTextFrame.

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()

SmartArt objektum elrendezéstípusának módosítása

A SmartArt elrendezés szabályozza, hogyan vannak elhelyezve és összekapcsolva a csomópontok. Az alábbi példa létrehoz egy SmartArt objektumot a SmartArtLayoutType BasicBlockList értékkel, módosítja BasicProcess értékre, és elmenti a prezentációt. A ShapeCollection.addSmartArt‑nek átadott pozíció és méret pontban van megadva. Használja a SmartArt.setLayout‑t az elrendezés módosításához.

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(10, 10, 400, 300, SmartArtLayoutType.BasicBlockList)
    smart_art.setLayout(SmartArtLayoutType.BasicProcess)

    presentation.save("ChangeSmartArtLayout.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

Ellenőrizze, hogy egy SmartArt csomópont rejtett-e

SmartArtNode.isHidden jelzi, hogy a csomópont rejtett-e a SmartArt adatmodellben. A rejtett csomópontok létezhetnek a struktúrában akkor is, ha a kiválasztott elrendezés nem jeleníti meg őket látható diagram elemekként.

Az alábbi példa egy csomópontot ad hozzá egy SmartArt objektumhoz, amely a SmartArtLayoutType RadialCycle értéket használja, és ellenőrzi a hozzáadott csomópont rejtett állapotát. Üzenetet ír ki, ha a csomópont rejtett, és elmenti a diagramot.

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(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()

A szervezeti diagram elrendezésének lekérése vagy beállítása

A SmartArt diagramok, amelyek szervezeti diagram elrendezést használnak, a SmartArtNode.getOrganizationChartLayout és a SmartArtNode.setOrganizationChartLayout határozzák meg, hogyan vannak elrendezve a gyermekcsomópontok egy szülőcsomópont alatt. Például a gyermekcsomópontokat beállíthatja, hogy balról, jobbról vagy mindkét oldalról lógjanak, a kiválasztott OrganizationChartLayoutType függvényében.

Az alábbi példa létrehoz egy szervezeti diagramot, és beállítja az első csomópont elrendezését a OrganizationChartLayoutType LeftHanging értékre. A 0‑ás nulla alapú index a legfelső szintű első csomópontot választja ki; gyermekcsomópontjai a kiválasztott elrendezést használják. Ezután a módosított prezentáció el van mentve.

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()

Képes szervezeti diagram létrehozása

A képes szervezeti diagram egy SmartArt elrendezés, amely hierarchikus diagramokhoz készült, és képhasználati helyőrzőket tartalmaz. Használja a SmartArtLayoutType PictureOrganizationChart értéket a SmartArt objektum diára való hozzáadásakor. Ez a példa egy diagramot ment képhasználati helyőrzőkkel; nem tölti fel a helyőrzőket képekkel.

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()

Örökölt diagramok alakzatcsoportokká konvertálása

Amikor egy meglévő prezentációt modernizál, előfordulhat, hogy frissíteni kell egy eredetileg PowerPoint 97–2003-ban létrehozott szervezeti diagramot. Az Aspose.Slides ezeket az örökölt diagramokat LegacyDiagram objektumokként ábrázolja. Használja a LegacyDiagram.convertToGroupShape metódust, hogy egy diagramot alakzatcsoporttá alakítson, így egyes vizuális elemeket szerkeszthet. Lásd a LegacyDiagram API Reference részleteket.

A konvertálás egy új csoportot ad a alakzatgyűjteményhez az eredeti diagram eltávolítása nélkül. Sikeres konvertálás után távolítsa el az eredetit a ShapeCollection.remove metódussal, hogy elkerülje a duplikált tartalmat. Gyűjtse össze az örökölt diagramokat egy listába a konvertálás előtt, hogy az alakzatok hozzáadása és eltávolítása ne szakítsa meg az iterációt.

Az alábbi példa megnyit egy prezentációt, minden diát keres, a diagramokat alakzatcsoportokká konvertálja, és az így frissített prezentációt PPTX‑ként menti.

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()

A mentett prezentáció szerkeszthető alakzatcsoportokat tartalmaz az átalakított örökölt diagramok helyén, az eredeti diagramok már nem vannak jelen. Nyissa meg a PPTX‑et a PowerPointban, hogy szerkessze az egyes csoportok elemeit, például a szöveget, kitöltést vagy pozíciót.

GYIK

Támogatja a SmartArt a tükrözést vagy megfordítást jobb‑bal (RTL) nyelvek esetén?

Igen. A SmartArt.setReversed metódus megfordítja a diagram irányát balról jobbra és vissza, amikor a kiválasztott SmartArt elrendezés támogatja a fordítást.

Hogyan másolhatom a SmartArt-ot ugyanarra a diára vagy egy másik prezentációba, miközben megőrzöm a formázást?

A a SmartArt alakzat klónozása használható a ShapeCollection.addClone metódussal, vagy az az egész dia klónozása a SmartArt‑ot tartalmazó diával. Mindkét megközelítés megőrzi a méretet, a pozíciót és a formázást.

Hogyan renderelhetem a SmartArt-ot raszteres képre előnézethez vagy webes exporthoz?

A Dia renderelése vagy a teljes prezentáció PNG vagy JPEG formátumba. A SmartArt a dia részeként kerül renderelésre.

Hogyan találhatok meg egy konkrét SmartArt objektumot egy dián, ha több is van?

Használja a Shape.setAlternativeText vagy a Shape.setName metódust, hogy egyedi alternatív szöveget vagy nevet rendeljön a SmartArt alakzathoz, keresse meg ezt az értéket a BaseSlide.getShapes segítségével, majd ellenőrizze, hogy a megtalált alakzat egy SmartArt.