Gestionar SmartArt en presentaciones de PowerPoint con Java

Obtener texto de un objeto SmartArt

Ahora se ha añadido el método TextFrame a la interfaz ISmartArtShape y a la clase SmartArtShape respectivamente. Esta propiedad le permite obtener todo el texto de SmartArt si no solo tiene texto en los nodos. El siguiente fragmento de código le ayudará a obtener texto de un nodo SmartArt.

Presentation pres = new Presentation("Presentation.pptx");
try {
    ISlide slide = pres.getSlides().get_Item(0);
    ISmartArt smartArt = (ISmartArt)slide.getShapes().get_Item(0);

    ISmartArtNodeCollection smartArtNodes = smartArt.getAllNodes();
    for (ISmartArtNode smartArtNode : smartArtNodes)
    {
        for (ISmartArtShape nodeShape : smartArtNode.getShapes())
        {
            if (nodeShape.getTextFrame() != null)
                System.out.println(nodeShape.getTextFrame().getText());
        }
    }
} finally {
    if (pres != null) pres.dispose();
}

Cambiar el tipo de diseño de un objeto SmartArt

Para cambiar el tipo de diseño de SmartArt. Siga los pasos a continuación:

  • Cree una instancia de la clase Presentation.
  • Obtenga la referencia de una diapositiva utilizando su índice.
  • Añada SmartArt BasicBlockList.
  • Cambie LayoutType a BasicProcess.
  • Guarde la presentación como un archivo PPTX.

En el ejemplo que se muestra a continuación, hemos añadido un conector entre dos formas.

Presentation pres = new Presentation();
try {
    // Añadir SmartArt BasicProcess
    ISmartArt smart = pres.getSlides().get_Item(0).getShapes().addSmartArt(10, 10, 400, 300, SmartArtLayoutType.BasicBlockList);

    // Cambiar LayoutType a BasicProcess
    smart.setLayout(SmartArtLayoutType.BasicProcess);

    // Guardar presentación
    pres.save("ChangeSmartArtLayout_out.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Comprobar la propiedad Visibility de un objeto SmartArt

Tenga en cuenta: el método ISmartArtNode.isHidden() devuelve true si este nodo está oculto en el modelo de datos. Para comprobar la propiedad oculta de cualquier nodo de SmartArt. Siga los pasos a continuación:

  • Cree una instancia de la clase Presentation.
  • Añada SmartArt RadialCycle.
  • Añada un nodo en SmartArt.
  • Compruebe la propiedad visibility.
  • Guarde la presentación como un archivo PPTX.

En el ejemplo que se muestra a continuación, hemos añadido un conector entre dos formas.

Presentation pres = new Presentation();
try {
    // Añadir SmartArt BasicProcess 
    ISmartArt smart = pres.getSlides().get_Item(0).getShapes().addSmartArt(10, 10, 400, 300, SmartArtLayoutType.RadialCycle);

    // Añadir nodo en SmartArt 
    ISmartArtNode node = smart.getAllNodes().addNode();

    // Comprobar la propiedad isHidden
    boolean hidden = node.isHidden(); // Devuelve true

    if (hidden)
    {
        // Realizar algunas acciones o notificaciones
    }
    // Guardar presentación
    pres.save("CheckSmartArtHiddenProperty_out.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Obtener o establecer el tipo de organigrama

Los métodos ISmartArtNode.getOrganizationChartLayout() y setOrganizationChartLayout(int) permiten obtener o establecer el tipo de organigrama asociado al nodo actual. Para obtener o establecer el tipo de organigrama, siga los pasos a continuación:

En el ejemplo que se muestra a continuación, hemos añadido un conector entre dos formas.

Presentation pres = new Presentation();
try {
    // Añadir SmartArt BasicProcess
    ISmartArt smart = pres.getSlides().get_Item(0).getShapes().addSmartArt(10, 10, 400, 300, SmartArtLayoutType.OrganizationChart);

    // Obtener o establecer el tipo de organigrama
    smart.getNodes().get_Item(0).setOrganizationChartLayout(OrganizationChartLayoutType.LeftHanging);

    // Guardar presentación
    pres.save("OrganizeChartLayoutType_out.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Crear un organigrama de imagen

Aspose.Slides for Java ofrece una API sencilla para crear diagramas PictureOrganization de forma fácil. Para crear un diagrama en una diapositiva:

  1. Cree una instancia de la clase Presentation.
  2. Obtenga la referencia de una diapositiva por su índice.
  3. Añada un diagrama con datos predeterminados junto con el tipo deseado (ChartType.PictureOrganizationChart).
  4. Guarde la presentación modificada en un archivo PPTX

El siguiente código se utiliza para crear un diagrama.

Presentation pres = new Presentation("test.pptx");
try {
    ISmartArt smartArt = pres.getSlides().get_Item(0).getShapes().addSmartArt(0, 0, 400, 400, SmartArtLayoutType.PictureOrganizationChart);
    pres.save("OrganizationChart.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Obtener o establecer el estado de SmartArt

Para obtener o establecer el estado de SmartArt. Siga los pasos a continuación:

  1. Cree una instancia de la clase Presentation.
  2. Añada SmartArt en la diapositiva.
  3. Obtener o Establecer el estado del diagrama SmartArt.
  4. Guarde la presentación como un archivo PPTX.

El siguiente código se utiliza para crear un diagrama.

// Instanciar la clase Presentation que representa el archivo PPTX
Presentation pres = new Presentation();
try {
    // Añadir SmartArt BasicProcess
    ISmartArt smart = pres.getSlides().get_Item(0).getShapes().addSmartArt(10, 10, 400, 300, SmartArtLayoutType.BasicProcess);
    
    // Obtener o establecer el estado del diagrama SmartArt
    smart.setReversed(true);
    boolean flag = smart.isReversed();
    
    // Guardar presentación
    pres.save("output.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Preguntas frecuentes

¿SmartArt admite el reflejo/inversión para idiomas RTL?

Sí. El método setReversed cambia la dirección del diagrama (LTR/RTL) si el tipo de SmartArt seleccionado admite la inversión.

¿Cómo puedo copiar SmartArt a la misma diapositiva o a otra presentación manteniendo el formato?

Puede clonar la forma SmartArt a través de la colección de formas (ShapeCollection.addClone) o clonar la diapositiva completa que contiene esta forma. Ambos enfoques preservan el tamaño, la posición y el estilo.

¿Cómo puedo renderizar SmartArt a una imagen rasterizada para vista previa o exportación web?

Renderice la diapositiva (o toda la presentación) a PNG/JPEG mediante la API que convierte diapositivas/presentaciones a imágenes; SmartArt se dibujará como parte de la diapositiva.

¿Cómo puedo seleccionar programáticamente un SmartArt específico en una diapositiva si hay varios?

Una práctica común es usar texto alternativo (Alt Text) o un nombre y buscar la forma por ese atributo dentro de formas de la diapositiva, luego comprobar el tipo para confirmar que es SmartArt. La documentación describe técnicas típicas para encontrar y trabajar con formas.