Manipulaciones de Formas

Encontrar Forma en la Diapositiva

Este tema describirá una técnica simple para facilitar a los desarrolladores encontrar una forma específica en una diapositiva sin usar su Id interno. Es importante saber que los archivos de Presentación de PowerPoint no tienen forma de identificar formas en una diapositiva excepto por un Id interno único. Parece ser difícil para los desarrolladores encontrar una forma usando su Id único interno. Todas las formas añadidas a las diapositivas tienen algún Texto Alternativo. Sugerimos a los desarrolladores usar texto alternativo para encontrar una forma específica. Puede usar MS PowerPoint para definir el texto alternativo para objetos que planea cambiar en el futuro.

Después de establecer el texto alternativo de cualquier forma deseada, puede abrir esa presentación utilizando Aspose.Slides para Java e iterar a través de todas las formas añadidas a una diapositiva. Durante cada iteración, puede verificar el texto alternativo de la forma y la forma con el texto alternativo coincidente sería la forma requerida por usted. Para demostrar esta técnica de mejor manera, hemos creado un método, findShape que hace el truco para encontrar una forma específica en una diapositiva y simplemente devuelve esa forma.

// Instanciar una clase de Presentación que representa el archivo de presentación
Presentation pres = new Presentation("FindingShapeInSlide.pptx");
try {

    ISlide slide = pres.getSlides().get_Item(0);
    // Texto alternativo de la forma a encontrar
    IShape shape = findShape(slide, "Shape1");
    if (shape != null)
    {
        System.out.println("Nombre de la Forma: " + shape.getName());
    }
} finally {
    if (pres != null) pres.dispose();
}
// Implementación del método para encontrar una forma en una diapositiva usando su texto alternativo
public static IShape findShape(ISlide slide, String alttext)
{
    // Iterando a través de todas las formas dentro de la diapositiva
    for (int i = 0; i < slide.getShapes().size(); i++)
    {
        // Si el texto alternativo de la diapositiva coincide con el requerido
        // Retornar la forma
        if (slide.getShapes().get_Item(i).getAlternativeText().compareTo(alttext) == 0)
            return slide.getShapes().get_Item(i);
    }
    return null;
}

Clonar Forma

Para clonar una forma a una diapositiva usando Aspose.Slides para Java:

  1. Cree una instancia de la clase Presentation.
  2. Obtenga la referencia de una diapositiva usando su índice.
  3. Acceda a la colección de formas de la diapositiva fuente.
  4. Agregue una nueva diapositiva a la presentación.
  5. Clone formas de la colección de formas de la diapositiva fuente a la nueva diapositiva.
  6. Guarde la presentación modificada como un archivo PPTX.

El siguiente ejemplo agrega una forma grupal a una diapositiva.

// Instanciar la clase de Presentación
Presentation pres = new Presentation("Source Frame.pptx");
try {
    IShapeCollection sourceShapes = pres.getSlides().get_Item(0).getShapes();
    ILayoutSlide blankLayout = pres.getMasters().get_Item(0).getLayoutSlides().getByType(SlideLayoutType.Blank);
    ISlide destSlide = pres.getSlides().addEmptySlide(blankLayout);
    IShapeCollection destShapes = destSlide.getShapes();
    destShapes.addClone(sourceShapes.get_Item(1), 50, 150 + sourceShapes.get_Item(0).getHeight());
    destShapes.addClone(sourceShapes.get_Item(2));
    destShapes.insertClone(0, sourceShapes.get_Item(0), 50, 150);

    // Escribir el archivo PPTX en el disco
    pres.save("CloneShape_out.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Eliminar Forma

Aspose.Slides para Java permite a los desarrolladores eliminar cualquier forma. Para eliminar la forma de cualquier diapositiva, siga los pasos a continuación:

  1. Cree una instancia de la clase Presentation.
  2. Acceda a la primera diapositiva.
  3. Encuentre la forma con un texto alternativo específico.
  4. Elimine la forma.
  5. Guarde el archivo en el disco.
// Crear objeto de Presentación
Presentation pres = new Presentation();
try {
    // Obtener la primera diapositiva
    ISlide sld = pres.getSlides().get_Item(0);

    // Agregar una forma automática de tipo rectángulo
    sld.getShapes().addAutoShape(ShapeType.Rectangle, 50, 40, 150, 50);
    sld.getShapes().addAutoShape(ShapeType.Moon, 160, 40, 150, 50);

    String altText = "Definido por el Usuario";
    int iCount = sld.getShapes().size();
    for (int i = 0; i < iCount; i++)
    {
        AutoShape ashp = (AutoShape)sld.getShapes().get_Item(0);
        if (alttext.equals(ashp.getAlternativeText()))
        {
            sld.getShapes().remove(ashp);
        }
    }

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

Ocultar Forma

Aspose.Slides para Java permite a los desarrolladores ocultar cualquier forma. Para ocultar la forma de cualquier diapositiva, siga los pasos a continuación:

  1. Cree una instancia de la clase Presentation.
  2. Acceda a la primera diapositiva.
  3. Encuentre la forma con un texto alternativo específico.
  4. Oculte la forma.
  5. Guarde el archivo en el disco.
// Instanciar la clase de Presentación que representa el PPTX
Presentation pres = new Presentation();
try {
    // Obtener la primera diapositiva
    ISlide sld = pres.getSlides().get_Item(0);

    // Agregar una forma automática de tipo rectángulo
    sld.getShapes().addAutoShape(ShapeType.Rectangle, 50, 40, 150, 50);
    sld.getShapes().addAutoShape(ShapeType.Moon, 160, 40, 150, 50);

    String alttext = "Definido por el Usuario";
    int iCount = sld.getShapes().size();
    for (int i = 0; i < iCount; i++)
    {
        AutoShape ashp = (AutoShape)sld.getShapes().get_Item(i);
        if (alttext.equals(ashp.getAlternativeText()))
        {
            ashp.setHidden(true);
        }
    }

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

Cambiar Orden de Formas

Aspose.Slides para Java permite a los desarrolladores volver a ordenar las formas. Reordenar la forma especifica qué forma está al frente o qué forma está atrás. Para reordenar la forma de cualquier diapositiva, siga los pasos a continuación:

  1. Cree una instancia de la clase Presentation.
  2. Acceda a la primera diapositiva.
  3. Agregue una forma.
  4. Agregue algún texto en el marco de texto de la forma.
  5. Agregue otra forma con las mismas coordenadas.
  6. Reordene las formas.
  7. Guarde el archivo en el disco.
Presentation pres = new Presentation("ChangeShapeOrder.pptx");
try {
    ISlide slide = pres.getSlides().get_Item(0);
    IAutoShape shp3 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 200, 365, 400, 150);
    shp3.getFillFormat().setFillType(FillType.NoFill);
    shp3.addTextFrame(" ");

    IParagraph para = shp3.getTextFrame().getParagraphs().get_Item(0);
    IPortion portion = para.getPortions().get_Item(0);
    portion.setText("Texto de Marca de Agua Texto de Marca de Agua Texto de Marca de Agua");

    shp3 = slide.getShapes().addAutoShape(ShapeType.Triangle, 200, 365, 400, 150);

    slide.getShapes().reorder(2, shp3);

    pres.save("Reshape_out.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Obtener ID de Forma de Interop

Aspose.Slides para Java permite a los desarrolladores obtener un identificador único de forma en el alcance de la diapositiva en contraste con el método getUniqueId que permite obtener un identificador único en el alcance de la presentación. Se agregó el método getOfficeInteropShapeId a las interfaces IShape y Shape. El valor devuelto por el método getOfficeInteropShapeId corresponde al valor del Id del objeto Microsoft.Office.Interop.PowerPoint.Shape. A continuación se presenta un código de muestra.

Presentation pres = new Presentation("Presentation.pptx");
try {
    // Obtener el identificador único de forma en el alcance de la diapositiva
    long officeInteropShapeId = pres.getSlides().get_Item(0).getShapes().get_Item(0).getOfficeInteropShapeId();

} finally {
    if (pres != null) pres.dispose();
}

Establecer Texto Alternativo para la Forma

Aspose.Slides para Java permite a los desarrolladores establecer Texto Alternativo de cualquier forma. Las formas en una presentación podrían distinguirse mediante el método AlternativeText o Nombre de Forma. Los métodos setAlternativeText y getAlternativeText podrían leerse o establecerse utilizando Aspose.Slides así como Microsoft PowerPoint. Al usar este método, puede etiquetar una forma y realizar diferentes operaciones como eliminar una forma, ocultar una forma o volver a ordenar formas en una diapositiva. Para establecer el Texto Alternativo de una forma, siga los pasos a continuación:

  1. Cree una instancia de la clase Presentation.
  2. Acceda a la primera diapositiva.
  3. Agregue cualquier forma a la diapositiva.
  4. Realice algún trabajo con la forma recién agregada.
  5. Recorra las formas para encontrar una forma.
  6. Establezca el Texto Alternativo.
  7. Guarde el archivo en el disco.
// Instanciar la clase de Presentación que representa el PPTX
Presentation pres = new Presentation();
try {
    // Obtener la primera diapositiva
    ISlide sld = pres.getSlides().get_Item(0);

    // Agregar forma automática de tipo rectángulo
    IShape shp1 = sld.getShapes().addAutoShape(ShapeType.Rectangle, 50, 40, 150, 50);
    IShape shp2 = sld.getShapes().addAutoShape(ShapeType.Moon, 160, 40, 150, 50);
    shp2.getFillFormat().setFillType(FillType.Solid);
    shp2.getFillFormat().getSolidFillColor().setColor(Color.GRAY);

    for (int i = 0; i < sld.getShapes().size(); i++)
    {
        AutoShape shape = (AutoShape) sld.getShapes().get_Item(i);
        if (shape != null)
        {
            shape.setAlternativeText("Definido por el Usuario");
        }
    }

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

Acceder a Formatos de Diseño para la Forma

Aspose.Slides para Java proporciona una API simple para acceder a formatos de diseño para una forma. Este artículo demuestra cómo puede acceder a formatos de diseño.

A continuación se proporciona un código de muestra.

Presentation pres = new Presentation("pres.pptx");
try {
    for (ILayoutSlide layoutSlide : pres.getLayoutSlides())
    {
        for (IShape shape : layoutSlide.getShapes())
        {
            IFillFormat fillFormats = shape.getFillFormat();
            ILineFormat lineFormats = shape.getLineFormat();
        }
    }
} finally {
    if (pres != null) pres.dispose();
}

Renderizar Forma como SVG

Ahora Aspose.Slides para Java soporta la renderización de una forma como svg. Se ha agregado el método writeAsSvg (y su sobrecarga) a la clase Shape y a la interfaz IShape. Este método permite guardar el contenido de la forma como un archivo SVG. El fragmento de código a continuación muestra cómo exportar la forma de la diapositiva a un archivo SVG.

Presentation pres = new Presentation("TestExportShapeToSvg.pptx");
try {
    FileOutputStream stream = new FileOutputStream("SingleShape.svg");
    try {
        pres.getSlides().get_Item(0).getShapes().get_Item(0).writeAsSvg(stream);
    } finally {
        if (stream != null) stream.close();
    }
} catch (IOException e) {
} finally {
    if (pres != null) pres.dispose();
}

Alineación de Formas

Aspose.Slides permite alinear formas ya sea en relación con los márgenes de la diapositiva o entre sí. Para este propósito, se ha agregado el método sobrecargado SlidesUtil.alignShape(). La enumeración ShapesAlignmentType define las posibles opciones de alineación.

Ejemplo 1

El código fuente a continuación alinea las formas con índices 1, 2 y 4 a lo largo del borde superior de la diapositiva.

Presentation pres = new Presentation("example.pptx");
try {
    ISlide slide = pres.getSlides().get_Item(0);
    IShape shape1 = slide.getShapes().get_Item(1);
    IShape shape2 = slide.getShapes().get_Item(2);
    IShape shape3 = slide.getShapes().get_Item(4);
    SlideUtil.alignShapes(ShapesAlignmentType.AlignTop, true, pres.getSlides().get_Item(0), new int[]
    {
        slide.getShapes().indexOf(shape1),
        slide.getShapes().indexOf(shape2),
        slide.getShapes().indexOf(shape3)
    });
} finally {
    if (pres != null) pres.dispose();
}

Ejemplo 2

El siguiente ejemplo muestra cómo alinear toda la colección de formas en relación con la forma más baja en la colección.

Presentation pres = new Presentation("example.pptx");
try {
    SlideUtil.alignShapes(ShapesAlignmentType.AlignBottom, false, pres.getSlides().get_Item(0));
} finally {
    if (pres != null) pres.dispose();
}