Crear o Administrar Nodo de Forma SmartArt en PowerPoint

Agregar Nodo SmartArt en Presentación de PowerPoint usando PHP

Aspose.Slides para PHP a través de Java ha proporcionado la API más sencilla para gestionar las formas SmartArt de la manera más fácil. El siguiente código de ejemplo ayudará a agregar un nodo y un nodo hijo dentro de la forma SmartArt.

  1. Crear una instancia de la clase Presentation y cargar la presentación con la Forma SmartArt.
  2. Obtener la referencia de la primera diapositiva utilizando su índice.
  3. Recorrer cada forma dentro de la primera diapositiva.
  4. Verificar si la forma es de tipo SmartArt y convertir el tipo de la forma seleccionada a SmartArt si es SmartArt.
  5. Agregar un nuevo Nodo en la forma SmartArt NodeCollection y establecer el texto en TextFrame.
  6. Ahora, Agregar un Nodo Hijo en el nuevo SmartArt Nodo y establecer el texto en TextFrame.
  7. Guardar la Presentación.
  # Cargar la presentación deseada
  $pres = new Presentation("SimpleSmartArt.pptx");
  try {
    # Recorrer cada forma dentro de la primera diapositiva
    foreach($pres->getSlides()->get_Item(0)->getShapes() as $shape) {
      # Verificar si la forma es de tipo SmartArt
      if (java_instanceof($shape, new JavaClass("com.aspose.slides.SmartArt"))) {
        # Convertir la forma a SmartArt
        $smart = $shape;
        # Agregar un nuevo Nodo SmartArt
        $TemNode = $smart->getAllNodes()->addNode();
        # Agregar texto
        $TemNode->getTextFrame()->setText("Test");
        # Agregar un nuevo nodo hijo en el nodo padre. Se añadirá al final de la colección
        $newNode = $TemNode->getChildNodes()->addNode();
        # Agregar texto
        $newNode->getTextFrame()->setText("Nuevo Nodo Agregado");
      }
    }
    # Guardar presentación
    $pres->save("AddSmartArtNode.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Agregar Nodo SmartArt en Posición Específica

En el siguiente código de ejemplo explicamos cómo agregar los nodos hijos pertenecientes a los respectivos nodos de la forma SmartArt en una posición particular.

  1. Crear una instancia de la clase Presentation.
  2. Obtener la referencia de la primera diapositiva utilizando su índice.
  3. Agregar una forma StackedList tipo SmartArt en la diapositiva accedida.
  4. Acceder al primer nodo en la forma SmartArt agregada.
  5. Ahora, agregar el Nodo Hijo para el Nodo seleccionado en la posición 2 y establecer su texto.
  6. Guardar la Presentación.
  # Crear una instancia de presentación
  $pres = new Presentation();
  try {
    # Acceder a la diapositiva de presentación
    $slide = $pres->getSlides()->get_Item(0);
    # Agregar la forma Smart Art IShape
    $smart = $slide->getShapes()->addSmartArt(0, 0, 400, 400, SmartArtLayoutType::StackedList);
    # Accediendo al nodo SmartArt en el índice 0
    $node = $smart->getAllNodes()->get_Item(0);
    # Agregar un nuevo nodo hijo en la posición 2 en el nodo padre
    $chNode = $node->getChildNodes()->addNodeByPosition(2);
    # Agregar Texto
    $chNode->getTextFrame()->setText("Texto de Ejemplo Agregado");
    # Guardar Presentación
    $pres->save("AddSmartArtNodeByPosition.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Acceder a Nodo SmartArt en Presentación de PowerPoint usando PHP

El siguiente código de ejemplo ayudará a acceder a los nodos dentro de la forma SmartArt. Tenga en cuenta que no puede cambiar el LayoutType del SmartArt, ya que es de solo lectura y se establece solo cuando se agrega la forma SmartArt.

  1. Crear una instancia de la clase Presentation y cargar la presentación con la Forma SmartArt.
  2. Obtener la referencia de la primera diapositiva utilizando su índice.
  3. Recorrer cada forma dentro de la primera diapositiva.
  4. Verificar si la forma es de tipo SmartArt y convertir el tipo de la forma seleccionada a SmartArt si es SmartArt.
  5. Recorrer todos los Nodos dentro de la Forma SmartArt.
  6. Acceder y mostrar información como la posición del Nodo SmartArt, nivel y texto.
  # Instanciar la clase Presentation
  $pres = new Presentation("SmartArtShape.pptx");
  try {
    # Obtener la primera diapositiva
    $slide = $pres->getSlides()->get_Item(0);
    # Recorrer cada forma dentro de la primera diapositiva
    foreach($slide->getShapes() as $shape) {
      # Verificar si la forma es de tipo SmartArt
      if (java_instanceof($shape, new JavaClass("com.aspose.slides.SmartArt"))) {
        # Convertir forma a SmartArt
        $smart = $shape;
        # Recorrer todos los nodos dentro del SmartArt
        for($i = 0; $i < java_values($smart->getAllNodes()->size()) ; $i++) {
          # Accediendo al nodo SmartArt en el índice i
          $node = $smart->getAllNodes()->get_Item($i);
          # Imprimiendo los parámetros del nodo SmartArt
          System->out->print($node->getTextFrame()->getText() . " " . $node->getLevel() . " " . $node->getPosition());
        }
      }
    }
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Acceder a Nodo Hijo SmartArt

El siguiente código de ejemplo ayudará a acceder a los nodos hijos pertenecientes a los respectivos nodos de la forma SmartArt.

  1. Crear una instancia de la clase Presentation y cargar la presentación con la Forma SmartArt.
  2. Obtener la referencia de la primera diapositiva utilizando su índice.
  3. Recorrer cada forma dentro de la primera diapositiva.
  4. Verificar si la forma es de tipo SmartArt y convertir el tipo de la forma seleccionada a SmartArt si es SmartArt.
  5. Recorrer todos los Nodos dentro de la Forma SmartArt.
  6. Para cada Nodo, recorrer todos los Nodos Hijos dentro del nodo particular.
  7. Acceder y mostrar información como la posición del Nodo Hijo, nivel y texto.
  # Instanciar la clase Presentation
  $pres = new Presentation("AccessChildNodes.pptx");
  try {
    # Obtener la primera diapositiva
    $slide = $pres->getSlides()->get_Item(0);
    # Recorrer cada forma dentro de la primera diapositiva
    foreach($slide->getShapes() as $shape) {
      # Verificar si la forma es de tipo SmartArt
      if (java_instanceof($shape, new JavaClass("com.aspose.slides.SmartArt"))) {
        # Convertir forma a SmartArt
        $smart = $shape;
        # Recorrer todos los nodos dentro del SmartArt
        for($i = 0; $i < java_values($smart->getAllNodes()->size()) ; $i++) {
          # Accediendo al nodo SmartArt en el índice i
          $node0 = $smart->getAllNodes()->get_Item($i);
          # Recorrer los nodos hijos en el nodo SmartArt en el índice i
          for($j = 0; $j < java_values($node0->getChildNodes()->size()) ; $j++) {
            # Accediendo al nodo hijo en el nodo SmartArt
            $node = $node0->getChildNodes()->get_Item($j);
            # Imprimiendo los parámetros del nodo hijo SmartArt
            System->out->print("j = " . $j . ", Texto = " . $node->getTextFrame()->getText() . ",  Nivel = " . $node->getLevel() . ", Posición = " . $node->getPosition());
          }
        }
      }
    }
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Acceder a Nodo Hijo SmartArt en Posición Específica

En este ejemplo, aprenderemos a acceder a los nodos hijos en una posición particular pertenecientes a los respectivos nodos de la forma SmartArt.

  1. Crear una instancia de la clase Presentation.
  2. Obtener la referencia de la primera diapositiva utilizando su índice.
  3. Agregar una forma StackedList tipo SmartArt.
  4. Acceder a la forma SmartArt agregada.
  5. Acceder al nodo en el índice 0 para la forma SmartArt accedida.
  6. Ahora, acceder al Nodo Hijo en la posición 1 para el nodo SmartArt accedido usando el método get_Item().
  7. Acceder y mostrar información como la posición del Nodo Hijo, nivel y texto.
  # Instanciar la presentación
  $pres = new Presentation();
  try {
    # Accediendo a la primera diapositiva
    $slide = $pres->getSlides()->get_Item(0);
    # Agregando la forma SmartArt en la primera diapositiva
    $smart = $slide->getShapes()->addSmartArt(0, 0, 400, 400, SmartArtLayoutType::StackedList);
    # Accediendo al nodo SmartArt en el índice 0
    $node = $smart->getAllNodes()->get_Item(0);
    # Accediendo al nodo hijo en la posición 1 en el nodo padre
    $position = 1;
    $chNode = $node->getChildNodes()->get_Item($position);
    # Imprimiendo los parámetros del nodo hijo SmartArt
    System->out->print("Texto = " . $chNode->getTextFrame()->getText() . ",  Nivel = " . $chNode->getLevel() . ", Posición = " . $chNode->getPosition());
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Eliminar Nodo SmartArt en Presentación de PowerPoint usando PHP

En este ejemplo, aprenderemos a eliminar los nodos dentro de la forma SmartArt.

  1. Crear una instancia de la clase Presentation y cargar la presentación con la Forma SmartArt.
  2. Obtener la referencia de la primera diapositiva utilizando su índice.
  3. Recorrer cada forma dentro de la primera diapositiva.
  4. Verificar si la forma es de tipo SmartArt y convertir la forma seleccionada a SmartArt si es SmartArt.
  5. Verificar si el SmartArt tiene más de 0 nodos.
  6. Seleccionar el nodo SmartArt a eliminar.
  7. Ahora, eliminar el nodo seleccionado utilizando el método RemoveNode .
  8. Guardar la Presentación.
  # Cargar la presentación deseada
  $pres = new Presentation("AddSmartArtNode.pptx");
  try {
    # Recorrer cada forma dentro de la primera diapositiva
    foreach($pres->getSlides()->get_Item(0)->getShapes() as $shape) {
      # Verificar si la forma es de tipo SmartArt
      if (java_instanceof($shape, new JavaClass("com.aspose.slides.SmartArt"))) {
        # Convertir la forma a SmartArt
        $smart = $shape;
        if (java_values($smart->getAllNodes()->size()) > 0) {
          # Accediendo al nodo SmartArt en el índice 0
          $node = $smart->getAllNodes()->get_Item(0);
          # Eliminando el nodo seleccionado
          $smart->getAllNodes()->removeNode($node);
        }
      }
    }
    # Guardar presentación
    $pres->save("RemoveSmartArtNode.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Eliminar Nodo SmartArt en Posición Específica

En este ejemplo, aprenderemos a eliminar los nodos dentro de la forma SmartArt en una posición particular.

  1. Crear una instancia de la clase Presentation y cargar la presentación con la Forma SmartArt.
  2. Obtener la referencia de la primera diapositiva utilizando su índice.
  3. Recorrer cada forma dentro de la primera diapositiva.
  4. Verificar si la forma es de tipo SmartArt y convertir la forma seleccionada a SmartArt si es SmartArt.
  5. Seleccionar el nodo de forma SmartArt en el índice 0.
  6. Ahora, verificar si el nodo SmartArt seleccionado tiene más de 2 nodos hijo.
  7. Ahora, eliminar el nodo en Posición 1 utilizando el método RemoveNode .
  8. Guardar la Presentación.
  # Cargar la presentación deseada
  $pres = new Presentation("AddSmartArtNode.pptx");
  try {
    # Recorrer cada forma dentro de la primera diapositiva
    foreach($pres->getSlides()->get_Item(0)->getShapes() as $shape) {
      # Verificar si la forma es de tipo SmartArt
      if (java_instanceof($shape, new JavaClass("com.aspose.slides.SmartArt"))) {
        # Convertir la forma a SmartArt
        $smart = $shape;
        if (java_values($smart->getAllNodes()->size()) > 0) {
          # Accediendo al nodo SmartArt en el índice 0
          $node = $smart->getAllNodes()->get_Item(0);
          if (java_values($node->getChildNodes()->size()) >= 2) {
            # Eliminando el nodo hijo en la posición 1
            $node->getChildNodes()->removeNode(1);
          }
        }
      }
    }
    # Guardar presentación
    $pres->save("RemoveSmartArtNodeByPosition.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Establecer Posición Personalizada para Nodo Hijo en SmartArt

Ahora Aspose.Slides para PHP a través de Java admite el establecimiento de las propiedades SmartArtShape X y Y. El fragmento de código a continuación muestra cómo establecer una posición personalizada de SmartArtShape, tamaño y rotación. También tenga en cuenta que añadir nuevos nodos provoca un recalculo de las posiciones y tamaños de todos los nodos. Además, con la configuración de posición personalizada, el usuario puede establecer los nodos según los requisitos.

  # Instanciar la clase Presentation
  $pres = new Presentation("SimpleSmartArt.pptx");
  try {
    $smart = $pres->getSlides()->get_Item(0)->getShapes()->addSmartArt(20, 20, 600, 500, SmartArtLayoutType::OrganizationChart);
    # Mover la forma SmartArt a una nueva posición
    $node = $smart->getAllNodes()->get_Item(1);
    $shape = $node->getShapes()->get_Item(1);
    $shape->setX($shape->getX() + $shape->getWidth() * 2);
    $shape->setY($shape->getY() - $shape->getHeight() * 2);
    # Cambiar el ancho de la forma SmartArt
    $node = $smart->getAllNodes()->get_Item(2);
    $shape = $node->getShapes()->get_Item(1);
    $shape->setWidth($shape->getWidth() + $shape->getWidth() * 2);
    # Cambiar la altura de la forma SmartArt
    $node = $smart->getAllNodes()->get_Item(3);
    $shape = $node->getShapes()->get_Item(1);
    $shape->setHeight($shape->getHeight() + $shape->getHeight() * 2);
    # Cambiar la rotación de la forma 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();
  }

Comprobar Nodo Asistente

Usaremos la siguiente forma SmartArt fuente para nuestra investigación en diferentes secciones de este artículo.

todo:image_alt_text
Figura: Forma SmartArt fuente en la diapositiva

En el siguiente código de ejemplo investigaremos cómo identificar Nodos Asistentes en la colección de nodos SmartArt y cambiarlos.

  1. Crear una instancia de la clase Presentation y cargar la presentación con la Forma SmartArt.
  2. Obtener la referencia de la segunda diapositiva utilizando su índice.
  3. Recorrer cada forma dentro de la primera diapositiva.
  4. Verificar si la forma es de tipo SmartArt y convertir la forma seleccionada a SmartArt si es SmartArt.
  5. Recorrer todos los nodos dentro de la forma SmartArt y verificar si son Nodos Asistentes.
  6. Cambiar el estado de Nodo Asistente a nodo normal.
  7. Guardar la Presentación.
  # Crear una instancia de presentación
  $pres = new Presentation("AddNodes.pptx");
  try {
    # Recorrer cada forma dentro de la primera diapositiva
    foreach($pres->getSlides()->get_Item(0)->getShapes() as $shape) {
      # Verificar si la forma es de tipo SmartArt
      if (java_instanceof($shape, new JavaClass("com.aspose.slides.SmartArt"))) {
        # Convertir la forma a SmartArt
        $smart = $shape;
        # Recorrer todos los nodos de la forma SmartArt
        for($i = 0; $i < java_values($smart->getAllNodes()->size()) ; $i++) {
          $node = $smart->getAllNodes()->get_Item($i);
          # Verificar si el nodo es un nodo asistente
          if ($node->isAssistant()) {
            # Establecer el nodo asistente a falso y convertirlo en un nodo normal
            $node->isAssistant(false);
          }
        }
      }
    }
    # Guardar presentación
    $pres->save("ChangeAssitantNode.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }
todo:image_alt_text
Figura: Nodos Asistentes cambiados en la forma SmartArt dentro de la diapositiva

Establecer Formato de Relleno de Nodo

Aspose.Slides para PHP a través de Java permite añadir formas SmartArt personalizadas y establecer su formato de relleno. Este artículo explica cómo crear y acceder a las formas SmartArt y establecer su formato de relleno utilizando Aspose.Slides para PHP a través de Java.

Siga los pasos a continuación:

  1. Crear una instancia de la clase Presentation.
  2. Obtener la referencia de una diapositiva utilizando su índice.
  3. Agregar una forma SmartArt estableciendo su LayoutType.
  4. Establecer el FillFormat para los nodos de la forma SmartArt.
  5. Escribir la presentación modificada como un archivo PPTX.
  # Instanciar la presentación
  $pres = new Presentation();
  try {
    # Accediendo a la diapositiva
    $slide = $pres->getSlides()->get_Item(0);
    # Agregando forma SmartArt y nodos
    $chevron = $slide->getShapes()->addSmartArt(10, 10, 800, 60, SmartArtLayoutType::ClosedChevronProcess);
    $node = $chevron->getAllNodes()->addNode();
    $node->getTextFrame()->setText("Algún texto");
    # Estableciendo el color de relleno del nodo
    foreach($node->getShapes() as $item) {
      $item->getFillFormat()->setFillType(FillType::Solid);
      $item->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
    }
    # Guardar la presentación
    $pres->save("TestSmart.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Generar Miniatura de Nodo Hijo SmartArt

Los desarrolladores pueden generar una miniatura del nodo hijo de un SmartArt siguiendo los pasos a continuación:

  1. Crear una instancia de la clase Presentation.
  2. Agregar SmartArt.
  3. Obtener la referencia de un nodo utilizando su índice.
  4. Obtener la imagen de miniatura.
  5. Guardar la imagen de miniatura en cualquier formato de imagen deseado.
  # Instanciar la clase Presentation que representa el archivo PPTX
  $pres = new Presentation();
  try {
    # Agregar SmartArt
    $smart = $pres->getSlides()->get_Item(0)->getShapes()->addSmartArt(10, 10, 400, 300, SmartArtLayoutType::BasicCycle);
    # Obtener la referencia de un nodo utilizando su índice
    $node = $smart->getNodes()->get_Item(1);
    # Obtener miniatura
    $slideImage = $node->getShapes()->get_Item(0)->getImage();
    # Guardar miniatura
    try {
      $slideImage->save("SmartArt_ChildNote_Thumbnail.png", ImageFormat::Png);
    } finally {
      if (!java_is_null($slideImage)) {
        $slideImage->dispose();
      }
    }
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }