Kelola Node Bentuk SmartArt dalam Presentasi Menggunakan Python

Gambaran Umum

Grafik SmartArt dalam presentasi PowerPoint diatur melalui node yang berisi teks dan menentukan struktur diagram. Aspose.Slides memungkinkan Anda bekerja dengan node SmartArt ini secara programatis: menambah node dan node anak baru, menyisipkan node anak pada posisi tertentu, mengakses node yang ada, dan membaca teks, tingkat, serta posisi mereka.

Artikel ini menjelaskan cara mengelola node bentuk SmartArt. Artikel ini menunjukkan cara menghapus node, bekerja dengan node anak berdasarkan indeks atau posisi, mengubah node asisten menjadi node biasa, menyesuaikan posisi, ukuran, dan rotasi bentuk node SmartArt, mengatur format isi node, dan membuat gambar thumbnail untuk node anak SmartArt.

Menambahkan Node SmartArt

Aspose.Slides untuk Python via Java menyediakan API untuk mengelola bentuk SmartArt. Contoh berikut menambahkan node dan node anak ke bentuk SmartArt.

  1. Buat instance dari kelas Presentation dan muat presentasi yang berisi bentuk SmartArt.
  2. Dapatkan slide pertama berdasarkan indeksnya.
  3. Iterasi melalui setiap bentuk pada slide pertama.
  4. Periksa apakah bentuk tersebut merupakan instance SmartArt.
  5. Tambahkan node baru ke koleksi node bentuk SmartArt dan atur teksnya melalui TextFrame(https://reference.aspose.com/slides/id/python-java/aspose.slides/textframe/).
  6. [Tambahkan] node anak ke node baru dan atur teksnya melalui TextFrame(https://reference.aspose.com/slides/id/python-java/aspose.slides/textframe/).
  7. Simpan presentasi.
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()

Menambahkan Node SmartArt pada Posisi Tertentu

Contoh berikut menambahkan node anak pada posisi tertentu dalam sebuah node SmartArt.

  1. Buat instance dari kelas Presentation .
  2. Dapatkan slide pertama berdasarkan indeksnya.
  3. Tambahkan bentuk SmartArt dengan tata letak StackedList ke slide.
  4. Akses node pertama dalam bentuk SmartArt yang ditambahkan.
  5. Tambahkan node anak ke node yang dipilih pada posisi 2 menggunakan addNodeByPosition dan atur teksnya.
  6. Simpan presentasi.
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()

Mengakses Node SmartArt

Contoh berikut mengakses node dalam bentuk SmartArt. Tata letak yang dikembalikan oleh getLayout bersifat read-only dan ditetapkan saat bentuk SmartArt ditambahkan.

  1. Buat instance dari kelas Presentation dan muat presentasi yang berisi bentuk SmartArt.
  2. Dapatkan slide pertama berdasarkan indeksnya.
  3. Iterasi melalui setiap bentuk pada slide pertama.
  4. Periksa apakah bentuk tersebut merupakan instance SmartArt .
  5. Iterasi melalui semua node dalam bentuk SmartArt.
  6. Baca dan tampilkan posisi, tingkat, serta teks masing-masing node 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()

Mengakses Node Anak SmartArt

Contoh berikut mengakses node anak dalam setiap node pada bentuk SmartArt.

  1. Buat instance dari kelas Presentation dan muat presentasi yang berisi bentuk SmartArt.
  2. Dapatkan slide pertama berdasarkan indeksnya.
  3. Iterasi melalui setiap bentuk pada slide pertama.
  4. Periksa apakah bentuk tersebut merupakan instance SmartArt .
  5. Iterasi melalui semua node dalam bentuk SmartArt.
  6. Untuk setiap node, iterasi melalui node anak.
  7. Baca dan tampilkan posisi, tingkat, dan teks node anak.
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()

Mengakses Node Anak SmartArt pada Posisi Tertentu

Contoh berikut mengakses node anak pada indeks tertentu dalam koleksi node induknya.

  1. Buat instance dari kelas Presentation .
  2. Dapatkan slide pertama berdasarkan indeksnya.
  3. Tambahkan bentuk SmartArt dengan tata letak StackedList .
  4. Akses bentuk SmartArt yang ditambahkan.
  5. Akses node pada indeks 0 dalam bentuk SmartArt.
  6. Akses node anak pada indeks 1 menggunakan get_Item .
  7. Baca dan tampilkan posisi, tingkat, dan teks node anak .
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()

Menghapus Node SmartArt

Contoh berikut menghapus node dari bentuk SmartArt.

  1. Buat instance dari kelas Presentation dan muat presentasi yang berisi bentuk SmartArt.
  2. Dapatkan slide pertama berdasarkan indeksnya.
  3. Iterasi melalui setiap bentuk pada slide pertama.
  4. Periksa apakah bentuk tersebut merupakan instance SmartArt .
  5. Periksa bahwa bentuk SmartArt memiliki setidaknya satu node.
  6. Pilih node SmartArt yang akan dihapus.
  7. Hapus node yang dipilih menggunakan removeNode .
  8. Simpan presentasi.
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()

Menghapus Node SmartArt dari Posisi Tertentu

Contoh berikut menghapus node anak pada indeks tertentu dalam koleksi node SmartArt.

  1. Buat instance dari kelas Presentation dan muat presentasi yang berisi bentuk SmartArt.
  2. Dapatkan slide pertama berdasarkan indeksnya.
  3. Iterasi melalui setiap bentuk pada slide pertama.
  4. Periksa apakah bentuk tersebut merupakan instance SmartArt .
  5. Akses node SmartArt pada indeks 0 jika ada.
  6. Periksa bahwa node SmartArt yang dipilih memiliki setidaknya dua node anak.
  7. Hapus node anak pada indeks 1 menggunakan removeNode .
  8. Simpan presentasi.
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()

Menetapkan Posisi Kustom untuk Node Anak dalam Objek SmartArt

Aspose.Slides untuk Python via Java mendukung pengaturan posisi SmartArtShape menggunakan setX dan setY. Contoh berikut menetapkan posisi, ukuran, dan rotasi kustom untuk bentuk node SmartArt. Menambahkan node baru menghitung ulang posisi dan ukuran semua node. Penempatan kustom memungkinkan Anda mengatur node sesuai kebutuhan.

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

Memeriksa Node Asisten

Bentuk SmartArt sumber berikut digunakan dalam contoh ini.

SmartArt shape
Gambar: Bentuk SmartArt sumber pada slide

Contoh berikut mengidentifikasi node asisten dalam koleksi node SmartArt dan mengubahnya menjadi node normal.

  1. Buat instance dari kelas Presentation dan muat presentasi yang berisi bentuk SmartArt.
  2. Dapatkan slide pertama berdasarkan indeksnya.
  3. Iterasi melalui setiap bentuk pada slide pertama.
  4. Periksa apakah bentuk tersebut merupakan instance SmartArt .
  5. Iterasi melalui semua node dalam bentuk SmartArt dan periksa apakah mereka merupakan Assistant Nodes .
  6. Ubah setiap node asisten menjadi node normal.
  7. Simpan presentasi.
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
Gambar: Node asisten diubah dalam bentuk SmartArt pada slide

Mengatur Format Isi Node

Aspose.Slides untuk Python via Java memungkinkan penambahan bentuk SmartArt khusus dan mengatur format isinya. Artikel ini menjelaskan cara membuat dan mengakses bentuk SmartArt serta mengatur format isinya menggunakan Aspose.Slides untuk Python via Java.

Silakan ikuti langkah-langkah berikut:

  1. Buat instance dari kelas Presentation .
  2. Dapatkan slide berdasarkan indeksnya.
  3. Tambahkan bentuk SmartArt dengan tata letak ClosedChevronProcess .
  4. Atur FillFormat untuk node bentuk SmartArt.
  5. Tuliskan presentasi yang dimodifikasi sebagai file 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()

Membuat Thumbnail Node Anak SmartArt

Untuk membuat thumbnail node anak SmartArt, ikuti langkah-langkah berikut:

  1. Buat instance dari kelas Presentation .
  2. Tambahkan bentuk SmartArt .
  3. Dapatkan node berdasarkan indeksnya.
  4. Dapatkan gambar thumbnail.
  5. Simpan gambar thumbnail dalam format gambar apa pun yang diinginkan.
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

Apakah animasi SmartArt didukung?

Ya. SmartArt diperlakukan sebagai bentuk biasa, sehingga Anda dapat menerapkan animasi standar (masuk, keluar, penekanan, jalur gerakan) dan menyesuaikan timing. Anda juga dapat memberi animasi pada bentuk di dalam node SmartArt bila diperlukan.

Bagaimana cara menemukan SmartArt tertentu pada slide secara andal jika ID internalnya tidak diketahui?

Berikan dan cari berdasarkan teks alternatif. Menetapkan teks alternatif yang berbeda pada SmartArt memungkinkan Anda menemukannya secara programatis tanpa bergantung pada pengidentifikasi internal.

Akankah tampilan SmartArt tetap terjaga saat mengonversi presentasi ke PDF?

Ya. Aspose.Slides merender SmartArt dengan fidelitas visual tinggi selama ekspor PDF, menjaga tata letak, warna, dan efek.

Bisakah saya mengekstrak gambar seluruh SmartArt (untuk pratinjau atau laporan)?

Ya. Anda dapat merender bentuk SmartArt ke format raster atau ke SVG untuk output vektor yang skalabel, sehingga cocok untuk thumbnail, laporan, atau penggunaan web.