Zarządzanie węzłami kształtu SmartArt w prezentacjach przy użyciu Javy

Przegląd

Grafika SmartArt w prezentacjach PowerPoint jest organizowana za pomocą węzłów, które zawierają tekst i definiują strukturę diagramu. Aspose.Slides umożliwia programowe działanie na tych węzłach SmartArt: dodawanie nowych węzłów i węzłów podrzędnych, wstawianie węzłów podrzędnych w określonej pozycji, dostęp do istniejących węzłów oraz odczytywanie ich tekstu, poziomu i pozycji.

Ten artykuł wyjaśnia, jak zarządzać węzłami kształtu SmartArt. Pokazuje, jak usuwać węzły, pracować z węzłami podrzędnymi według indeksu lub pozycji, zmienić węzeł pomocniczy na zwykły węzeł, dostosować pozycję, rozmiar i obrót kształtów węzłów SmartArt, ustawić formaty wypełnienia węzła oraz wygenerować miniaturkę obrazu dla węzła podrzędnego SmartArt.

Dodaj węzeł SmartArt

Aspose.Slides for Java udostępnia najprostsze API do zarządzania kształtami SmartArt w najłatwiejszy sposób. Poniższy przykładowy kod pomoże dodać węzeł i węzeł podrzędny wewnątrz kształtu SmartArt.

  1. Utwórz instancję klasy Prezentacja i załaduj prezentację z kształtem SmartArt.
  2. Uzyskaj odwołanie do pierwszego slajdu, używając jego indeksu.
  3. Przejdź przez wszystkie kształty wewnątrz pierwszego slajdu.
  4. Sprawdź, czy kształt jest typu SmartArt i rzutuj wybrany kształt na SmartArt, jeśli jest to SmartArt.
  5. Dodaj nowy węzeł w kształcie SmartArt NodeCollection i ustaw tekst w TextFrame.
  6. Teraz, Dodaj Węzeł podrzędny do nowo dodanego węzła SmartArt i ustaw tekst w TextFrame.
  7. Zapisz prezentację.
// Wczytaj żądaną prezentację
Presentation pres = new Presentation("SimpleSmartArt.pptx");
try {
    // Przejdź przez wszystkie kształty na pierwszym slajdzie
    for (IShape shape : pres.getSlides().get_Item(0).getShapes()) 
    {
        // Sprawdź, czy kształt jest typu SmartArt
        if (shape instanceof SmartArt) 
        {
            // Rzutuj kształt na SmartArt
            SmartArt smart = (SmartArt) shape;
    
            // Dodawanie nowego węzła SmartArt
            SmartArtNode TemNode = (SmartArtNode) smart.getAllNodes().addNode();
    
            // Dodawanie tekstu
            TemNode.getTextFrame().setText("Test");
    
            // Dodawanie nowego węzła podrzędnego w węźle nadrzędnym. Zostanie on dodany na końcu kolekcji
            SmartArtNode newNode = (SmartArtNode) TemNode.getChildNodes().addNode();
    
            // Dodawanie tekstu
            newNode.getTextFrame().setText("New Node Added");
        }
    }
    
    // Zapisywanie prezentacji
    pres.save("AddSmartArtNode.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Dodaj węzeł SmartArt w określonej pozycji

W poniższym przykładowym kodzie wyjaśniono, jak dodać węzły podrzędne należące do odpowiednich węzłów kształtu SmartArt w określonej pozycji.

  1. Utwórz instancję klasy Prezentacja.
  2. Uzyskaj odwołanie do pierwszego slajdu, używając jego indeksu.
  3. Dodaj kształt SmartArt typu StackedList na uzyskanym slajdzie.
  4. Uzyskaj dostęp do pierwszego węzła w dodanym kształcie SmartArt.
  5. Teraz, dodaj Węzeł podrzędny dla wybranego Węzła na pozycji 2 i ustaw jego tekst.
  6. Zapisz prezentację.
// Tworzenie instancji prezentacji
Presentation pres = new Presentation();
try {
    // Uzyskaj dostęp do slajdu prezentacji
    ISlide slide = pres.getSlides().get_Item(0);

    // Dodaj Smart Art IShape
    ISmartArt smart = slide.getShapes().addSmartArt(0, 0, 400, 400, SmartArtLayoutType.StackedList);

    // Uzyskiwanie węzła SmartArt o indeksie 0
    ISmartArtNode node = smart.getAllNodes().get_Item(0);

    // Dodawanie nowego węzła podrzędnego na pozycji 2 w węźle nadrzędnym
    SmartArtNode chNode = (SmartArtNode) ((SmartArtNodeCollection) node.getChildNodes()).addNodeByPosition(2);

    // Dodaj tekst
    chNode.getTextFrame().setText("Sample Text Added");

    // Zapisz prezentację
    pres.save("AddSmartArtNodeByPosition.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Dostęp do węzła SmartArt

Poniższy przykładowy kod pomoże uzyskać dostęp do węzłów wewnątrz kształtu SmartArt. Należy zauważyć, że nie można zmienić właściwości LayoutType SmartArt, ponieważ jest ona tylko do odczytu i jest ustawiana wyłącznie w momencie dodania kształtu SmartArt.

  1. Utwórz instancję klasy Prezentacja i załaduj prezentację z kształtem SmartArt.
  2. Uzyskaj odwołanie do pierwszego slajdu, używając jego indeksu.
  3. Przejdź przez wszystkie kształty wewnątrz pierwszego slajdu.
  4. Sprawdź, czy kształt jest typu SmartArt i rzutuj wybrany kształt na SmartArt, jeśli jest to SmartArt.
  5. Przejdź przez wszystkie Węzły wewnątrz kształtu SmartArt.
  6. Uzyskaj dostęp i wyświetl informacje, takie jak pozycja węzła SmartArt, poziom i tekst.
// Utwórz instancję klasy Presentation
Presentation pres = new Presentation("SmartArtShape.pptx");
try {
    // Pobierz pierwszy slajd
    ISlide slide = pres.getSlides().get_Item(0);
    
    // Przejdź przez wszystkie kształty na pierwszym slajdzie
    for (IShape shape : slide.getShapes()) 
    {
        // Sprawdź, czy kształt jest typu SmartArt
        if (shape instanceof ISmartArt) 
        {
            // Rzutuj kształt na SmartArt
            ISmartArt smart = (ISmartArt) shape;
    
            // Przejdź przez wszystkie węzły wewnątrz SmartArt
            for (int i = 0; i < smart.getAllNodes().size(); i++) 
            {
                // Uzyskiwanie węzła SmartArt o indeksie i
                SmartArtNode node = (SmartArtNode) smart.getAllNodes().get_Item(i);
    
                // Wyświetlanie parametrów węzła SmartArt
                System.out.print(node.getTextFrame().getText() + " " + node.getLevel() + " " + node.getPosition());
            }
        }
    }
} finally {
    if (pres != null) pres.dispose();
}

Dostęp do węzła podrzędnego SmartArt

Poniższy przykładowy kod pomoże uzyskać dostęp do węzłów podrzędnych należących do odpowiednich węzłów kształtu SmartArt.

  1. Utwórz instancję klasy Prezentacja i załaduj prezentację z kształtem SmartArt.
  2. Uzyskaj odwołanie do pierwszego slajdu, używając jego indeksu.
  3. Przejdź przez wszystkie kształty wewnątrz pierwszego slajdu.
  4. Sprawdź, czy kształt jest typu SmartArt i rzutuj wybrany kształt na SmartArt, jeśli jest to SmartArt.
  5. Przejdź przez wszystkie Węzły wewnątrz kształtu SmartArt.
  6. Dla każdego wybranego węzła kształtu SmartArt Węzeł, przejdź przez wszystkie Węzły podrzędne wewnątrz konkretnego węzła.
  7. Uzyskaj dostęp i wyświetl informacje, takie jak Węzeł podrzędny pozycja, poziom i tekst.
// Utwórz instancję klasy Presentation
Presentation pres = new Presentation("AccessChildNodes.pptx");
try {
    // Pobierz pierwszy slajd
    ISlide slide = pres.getSlides().get_Item(0);
    
    // Przejdź przez wszystkie kształty na pierwszym slajdzie
    for (IShape shape : slide.getShapes()) 
    {
        // Sprawdź, czy kształt jest typu SmartArt
        if (shape instanceof ISmartArt) 
        {
            // Rzutuj kształt na SmartArt
            ISmartArt smart = (ISmartArt) shape;
    
            // Przejdź przez wszystkie węzły wewnątrz SmartArt
            for (int i = 0; i < smart.getAllNodes().size(); i++) 
            {
                // Uzyskiwanie węzła SmartArt o indeksie i
                SmartArtNode node0 = (SmartArtNode) smart.getAllNodes().get_Item(i);
                
                // Przeglądanie węzłów podrzędnych w węźle SmartArt o indeksie i
                for (int j = 0; j < node0.getChildNodes().size(); j++) 
                {
                    // Uzyskiwanie węzła podrzędnego w węźle SmartArt
                    SmartArtNode node = (SmartArtNode) node0.getChildNodes().get_Item(j);
    
                    // Wyświetlanie parametrów węzła podrzędnego SmartArt
                    System.out.print("j = " + j + ", Text = " + node.getTextFrame().getText() + ",  Level = " + node.getLevel() + ", Position = " + node.getPosition());
                }
            }
        }
    }
} finally {
    if (pres != null) pres.dispose();
}

Dostęp do węzła podrzędnego SmartArt w określonej pozycji

W tym przykładzie dowiemy się, jak uzyskać dostęp do węzłów podrzędnych w określonej pozycji należących do odpowiednich węzłów kształtu SmartArt.

  1. Utwórz instancję klasy Prezentacja .
  2. Uzyskaj odwołanie do pierwszego slajdu, używając jego indeksu.
  3. Dodaj kształt SmartArt typu StackedList.
  4. Uzyskaj dostęp do dodanego kształtu SmartArt.
  5. Uzyskaj dostęp do węzła o indeksie 0 w uzyskanym kształcie SmartArt.
  6. Teraz uzyskaj dostęp do Węzła podrzędnego na pozycji 1 w uzyskanym węźle SmartArt, używając metody get_Item().
  7. Uzyskaj dostęp i wyświetl informacje, takie jak Węzeł podrzędny pozycja, poziom i tekst.
// Utwórz instancję prezentacji
Presentation pres = new Presentation();
try {
    // Uzyskiwanie pierwszego slajdu
    ISlide slide = pres.getSlides().get_Item(0);
    
    // Dodawanie kształtu SmartArt na pierwszym slajdzie
    ISmartArt smart = slide.getShapes().addSmartArt(0, 0, 400, 400, SmartArtLayoutType.StackedList);
    
    // Uzyskiwanie węzła SmartArt o indeksie 0
    ISmartArtNode node = smart.getAllNodes().get_Item(0);
    
    // Uzyskiwanie węzła podrzędnego na pozycji 1 w węźle nadrzędnym
    int position = 1;
    SmartArtNode chNode = (SmartArtNode) ((SmartArtNodeCollection) node.getChildNodes()).get_Item(position);
    
    // Wyświetlanie parametrów węzła podrzędnego SmartArt
    System.out.print("Text = " + chNode.getTextFrame().getText() + ",  Level = " + chNode.getLevel() + ", Position = " + chNode.getPosition());
} finally {
    if (pres != null) pres.dispose();
}

Usuń węzeł SmartArt

W tym przykładzie dowiemy się, jak usunąć węzły wewnątrz kształtu SmartArt.

  1. Utwórz instancję klasy Prezentacja i załaduj prezentację z kształtem SmartArt.
  2. Uzyskaj odwołanie do pierwszego slajdu, używając jego indeksu.
  3. Przejdź przez wszystkie kształty wewnątrz pierwszego slajdu.
  4. Sprawdź, czy kształt jest typu SmartArt i rzutuj wybrany kształt na SmartArt, jeśli jest to SmartArt.
  5. Sprawdź, czy SmartArt ma więcej niż 0 węzłów.
  6. Wybierz węzeł SmartArt, który ma zostać usunięty.
  7. Teraz usuń wybrany węzeł, używając metody RemoveNode .
  8. Zapisz prezentację.
// Wczytaj żądaną prezentację
Presentation pres = new Presentation("AddSmartArtNode.pptx");
try {
    // Przejdź przez wszystkie kształty na pierwszym slajdzie
    for (IShape shape : pres.getSlides().get_Item(0).getShapes()) 
    {
        // Sprawdź, czy kształt jest typu SmartArt
        if (shape instanceof ISmartArt) 
        {
            // Rzutuj kształt na SmartArt
            ISmartArt smart = (ISmartArt) shape;
    
            if (smart.getAllNodes().size() > 0) 
            {
                // Uzyskiwanie węzła SmartArt o indeksie 0
                ISmartArtNode node = smart.getAllNodes().get_Item(0);
    
                // Usuwanie wybranego węzła
                smart.getAllNodes().removeNode(node);
            }
        }
    }
    
    // Zapisz prezentację
    pres.save("RemoveSmartArtNode.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Usuń węzeł SmartArt z określonej pozycji

W tym przykładzie dowiemy się, jak usunąć węzły wewnątrz kształtu SmartArt w konkretnej pozycji.

  1. Utwórz instancję klasy Prezentacja i załaduj prezentację z kształtem SmartArt.
  2. Uzyskaj odwołanie do pierwszego slajdu, używając jego indeksu.
  3. Przejdź przez wszystkie kształty wewnątrz pierwszego slajdu.
  4. Sprawdź, czy kształt jest typu SmartArt i rzutuj wybrany kształt na SmartArt, jeśli jest to SmartArt.
  5. Wybierz węzeł kształtu SmartArt o indeksie 0.
  6. Teraz sprawdź, czy wybrany węzeł SmartArt ma więcej niż 2 węzły podrzędne.
  7. Teraz usuń węzeł na Pozycji 1 za pomocą RemoveNode .
  8. Zapisz prezentację.
// Wczytaj żądaną prezentację
Presentation pres = new Presentation("AddSmartArtNode.pptx");
try {
    // Przejdź przez wszystkie kształty na pierwszym slajdzie
    for (IShape shape : pres.getSlides().get_Item(0).getShapes()) 
    {
        // Sprawdź, czy kształt jest typu SmartArt
        if (shape instanceof SmartArt) 
        {
            // Rzutuj kształt na SmartArt
            SmartArt smart = (SmartArt) shape;
    
            if (smart.getAllNodes().size() > 0) 
            {
                // Uzyskiwanie węzła SmartArt o indeksie 0
                ISmartArtNode node = smart.getAllNodes().get_Item(0);
    
                if (node.getChildNodes().size() >= 2) 
                {
                    // Usuwanie węzła podrzędnego na pozycji 1
                    (node.getChildNodes()).removeNode(1);
                }
            }
        }
    }
    
    // Zapisz prezentację
    pres.save("RemoveSmartArtNodeByPosition.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Ustaw niestandardową pozycję dla węzła podrzędnego w obiekcie SmartArt

Teraz Aspose.Slides dla Java obsługuje ustawianie właściwości SmartArtShape X i Y. Poniższy fragment kodu pokazuje, jak ustawić niestandardową pozycję, rozmiar i obrót SmartArtShape; należy również zauważyć, że dodawanie nowych węzłów powoduje przeliczenie pozycji i rozmiarów wszystkich węzłów. Dzięki ustawieniom niestandardowej pozycji użytkownik może ustawić węzły zgodnie z wymaganiami.

// Utwórz instancję klasy Presentation
Presentation pres = new Presentation("SimpleSmartArt.pptx");
try{
    ISmartArt smart = pres.getSlides().get_Item(0).getShapes().addSmartArt(20, 20, 600, 500, SmartArtLayoutType.OrganizationChart);

    // Przesuń kształt SmartArt do nowej pozycji
    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);

    // Zmień szerokość kształtu SmartArt
    node = smart.getAllNodes().get_Item(2);
    shape = node.getShapes().get_Item(1);
    shape.setWidth(shape.getWidth() + shape.getWidth() * 2);

    // Zmień wysokość kształtu SmartArt
    node = smart.getAllNodes().get_Item(3);
    shape = node.getShapes().get_Item(1);
    shape.setHeight(shape.getHeight() + shape.getHeight() * 2);

    // Zmień obrót kształtu SmartArt
    node = smart.getAllNodes().get_Item(4);
    shape = node.getShapes().get_Item(1);
    shape.setRotation(90);

    pres.save("SmartArt.pptx", SaveFormat.Pptx);
}finally {
    pres.dispose();
}

Sprawdź węzeł pomocniczy

Do naszych badań w różnych sekcjach tego artykułu użyjemy następującego źródłowego kształtu SmartArt.

todo:image_alt_text
Rysunek: Źródłowy kształt SmartArt na slajdzie

W poniższym przykładowym kodzie zbadamy, jak zidentyfikować węzły pomocnicze w kolekcji węzłów SmartArt oraz jak je zmienić.

  1. Utwórz instancję klasy Prezentacja i załaduj prezentację z kształtem SmartArt.
  2. Uzyskaj odwołanie do drugiego slajdu, używając jego indeksu.
  3. Przejdź przez wszystkie kształty wewnątrz tego slajdu.
  4. Sprawdź, czy kształt jest typu SmartArt i rzutuj wybrany kształt na SmartArt, jeśli jest to SmartArt.
  5. Przejdź przez wszystkie węzły wewnątrz kształtu SmartArt i sprawdź, czy są Węzłami pomocniczymi.
  6. Zmień status węzła pomocniczego na zwykły węzeł.
  7. Zapisz prezentację.
// Tworzenie instancji prezentacji
Presentation pres = new Presentation("AddNodes.pptx");
try {
    // Przejdź przez wszystkie kształty na pierwszym slajdzie
    for (IShape shape : pres.getSlides().get_Item(0).getShapes()) 
    {
        // Sprawdź, czy kształt jest typu SmartArt
        if (shape instanceof ISmartArt) 
        {
            // Rzutuj kształt na SmartArt
            ISmartArt smart = (SmartArt) shape;
    
            // Przeglądanie wszystkich węzłów kształtu SmartArt
            for (int i = 0; i < smart.getAllNodes().size(); i++) 
            {
                ISmartArtNode node = smart.getAllNodes().get_Item(i);
                // Sprawdź, czy węzeł jest węzłem pomocniczym
                if (node.isAssistant()) 
                {
                    // Ustawienie węzła pomocniczego na false i przekształcenie go w zwykły węzeł
                    node.isAssistant();
                }
            }
        }
    }
    
    // Zapisz prezentację
    pres.save("ChangeAssitantNode.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}
todo:image_alt_text
Rysunek: Zmienione węzły pomocnicze w kształcie SmartArt na slajdzie

Ustaw format wypełnienia węzła

Aspose.Slides for Java umożliwia dodawanie niestandardowych kształtów SmartArt i ustawianie ich formatu wypełnienia. Ten artykuł wyjaśnia, jak tworzyć i uzyskiwać dostęp do kształtów SmartArt oraz ustawiać ich format wypełnienia przy użyciu Aspose.Slides for Java.

Postępuj zgodnie z poniższymi krokami:

  1. Utwórz instancję klasy Prezentacja.
  2. Uzyskaj odwołanie do slajdu, używając jego indeksu.
  3. Dodaj kształt SmartArt ustawiając jego LayoutType.
  4. Ustaw FillFormat dla węzłów kształtu SmartArt.
  5. Zapisz zmodyfikowaną prezentację jako plik PPTX.
// Utwórz instancję prezentacji
Presentation pres = new Presentation();
try {
    // Uzyskiwanie slajdu
    ISlide slide = pres.getSlides().get_Item(0);
    
    // Dodawanie kształtu SmartArt i węzłów
    ISmartArt chevron = slide.getShapes().addSmartArt(10, 10, 800, 60, SmartArtLayoutType.ClosedChevronProcess);
    ISmartArtNode node = chevron.getAllNodes().addNode();
    node.getTextFrame().setText("Some text");
    
    // Ustawianie koloru wypełnienia węzła
    for (IShape item : node.getShapes()) 
    {
        item.getFillFormat().setFillType(FillType.Solid);
        item.getFillFormat().getSolidFillColor().setColor(Color.RED);
    }
    
    // Zapisz prezentację
    pres.save("TestSmart.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Generuj miniaturę węzła podrzędnego SmartArt

Programiści mogą wygenerować miniaturę węzła podrzędnego SmartArt, postępując zgodnie z poniższymi krokami:

  1. Utwórz instancję klasy Prezentacja.
  2. Dodaj SmartArt.
  3. Uzyskaj odwołanie do węzła, używając jego indeksu.
  4. Pobierz obraz miniatury.
  5. Zapisz obraz miniatury w dowolnym wybranym formacie obrazu.
// Utwórz instancję klasy Presentation reprezentującej plik PPTX
Presentation pres = new Presentation();
try {
    // Dodaj SmartArt
    ISmartArt smart = pres.getSlides().get_Item(0).getShapes().addSmartArt(10, 10, 400, 300, SmartArtLayoutType.BasicCycle);

    // Uzyskaj odwołanie do węzła, używając jego indeksu
    ISmartArtNode node = smart.getNodes().get_Item(1);

    // Pobierz miniaturkę
    IImage slideImage = node.getShapes().get_Item(0).getImage();

    // Zapisz miniaturkę
    try {
          slideImage.save("SmartArt_ChildNote_Thumbnail.png", ImageFormat.Png);
    } finally {
         if (slideImage != null) slideImage.dispose();
    }
} finally {
    if (pres != null) pres.dispose();
}

FAQ

Czy animacja SmartArt jest obsługiwana?

Tak. SmartArt jest traktowany jako zwykły kształt, więc możesz zastosować standardowe animacje (wejścia, wyjścia, podkreślenia, ścieżki ruchu) i dostosować ich timing. Możesz również animować kształty wewnątrz węzłów SmartArt w razie potrzeby.

Jak mogę wiarygodnie zlokalizować konkretny SmartArt na slajdzie, jeśli jego wewnętrzne ID jest nieznane?

Przypisz i wyszukuj po alternatywnym tekście. Ustawienie charakterystycznego AltText w SmartArt umożliwia jego programowe odnalezienie bez polegania na wewnętrznych identyfikatorach.

Czy wygląd SmartArt zostanie zachowany przy konwersji prezentacji do PDF?

Tak. Aspose.Slides renderuje SmartArt z wysoką wiernością wizualną podczas eksportu do PDF, zachowując układ, kolory i efekty.

Czy mogę wyodrębnić obraz całego SmartArt (do podglądów lub raportów)?

Tak. Możesz renderować kształt SmartArt do formatów rastrowych lub do SVG dla skalowalnego wyjścia wektorowego, co czyni go odpowiednim do miniatur, raportów lub użycia w sieci.