Cómo agregar formas a PowerPoint en Java
Aspose.Slides FOSS for Java admite la incorporación de AutoShapes, Tables, Connectors y PictureFrames a las diapositivas de la presentación. Todos los tipos de forma se añaden a través de la colección slide.getShapes().
Guía paso a paso
Paso 1: Añadir la dependencia de Maven
<dependency>
<groupId>org.aspose.slides.foss</groupId>
<artifactId>aspose-slides-foss</artifactId>
<version>1.0.0</version>
</dependency>Paso 2: Crear una presentación
Siempre use try-with-resources para gestionar los recursos.
import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.IConnector;
import org.aspose.slides.foss.ITable;
import org.aspose.slides.foss.IPPImage;
import org.aspose.slides.foss.ILayoutSlide;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;
try (Presentation prs = new Presentation()) {
ISlide slide = prs.getSlides().get(0);
// ... add shapes ...
prs.save("output.pptx", SaveFormat.PPTX);
}Paso 3: Agregar una AutoShape
slide.getShapes().addAutoShape(shapeType, x, y, width, height) coloca una forma en la posición y tamaño dados (todos en puntos). Utilice las constantes ShapeType para seleccionar la forma.
import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.IConnector;
import org.aspose.slides.foss.ITable;
import org.aspose.slides.foss.IPPImage;
import org.aspose.slides.foss.ILayoutSlide;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;
try (Presentation prs = new Presentation()) {
ISlide slide = prs.getSlides().get(0);
// Rectangle
IAutoShape rect = slide.getShapes().addAutoShape(
ShapeType.RECTANGLE, 50, 50, 300, 100
);
rect.addTextFrame("Rectangle shape");
// Ellipse
IAutoShape ellipse = slide.getShapes().addAutoShape(
ShapeType.ELLIPSE, 400, 50, 200, 100
);
ellipse.addTextFrame("Ellipse shape");
prs.save("autoshapes.pptx", SaveFormat.PPTX);
}Paso 4: Añadir una tabla
slide.getShapes().addTable(x, y, colWidths, rowHeights) crea una tabla en la posición especificada. Los anchos de columna y las alturas de fila son matrices de valores en puntos.
import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.IConnector;
import org.aspose.slides.foss.ITable;
import org.aspose.slides.foss.IPPImage;
import org.aspose.slides.foss.ILayoutSlide;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;
try (Presentation prs = new Presentation()) {
ISlide slide = prs.getSlides().get(0);
double[] colWidths = {150.0, 150.0, 150.0};
double[] rowHeights = {40.0, 40.0, 40.0};
ITable table = slide.getShapes().addTable(50, 200, colWidths, rowHeights);
// Set header row text
String[] headers = {"Product", "Units", "Revenue"};
for (int col = 0; col < headers.length; col++) {
table.getRows().get(0).get(col).getTextFrame().setText(headers[col]);
}
// Set data rows
String[][] rows = {
{"Widget A", "120", "$2,400"},
{"Widget B", "85", "$1,700"},
};
for (int row = 0; row < rows.length; row++) {
for (int col = 0; col < rows[row].length; col++) {
table.getRows().get(row + 1).get(col)
.getTextFrame().setText(rows[row][col]);
}
}
prs.save("table.pptx", SaveFormat.PPTX);
}Paso 5: Añadir un conector
Los conectores enlazan visualmente dos formas. Crea primero las formas, luego agrega un conector y establece sus puntos de conexión de inicio y fin.
import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.IConnector;
import org.aspose.slides.foss.ITable;
import org.aspose.slides.foss.IPPImage;
import org.aspose.slides.foss.ILayoutSlide;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;
try (Presentation prs = new Presentation()) {
ISlide slide = prs.getSlides().get(0);
IAutoShape box1 = slide.getShapes().addAutoShape(
ShapeType.RECTANGLE, 50, 100, 150, 60
);
box1.addTextFrame("Start");
IAutoShape box2 = slide.getShapes().addAutoShape(
ShapeType.RECTANGLE, 350, 100, 150, 60
);
box2.addTextFrame("End");
IConnector conn = slide.getShapes().addConnector(
ShapeType.BENT_CONNECTOR3, 0, 0, 10, 10
);
conn.setStartShapeConnectedTo(box1);
conn.setStartShapeConnectionSiteIndex(3); // right side of box1
conn.setEndShapeConnectedTo(box2);
conn.setEndShapeConnectionSiteIndex(1); // left side of box2
prs.save("connector.pptx", SaveFormat.PPTX);
}Los índices de los sitios de conexión se numeran del 0 al 3 para un rectángulo: top=0, left=1, bottom=2, right=3.
Paso 6: Añadir un marco de foto
Incruste una imagen y agréguela a la diapositiva como un PictureFrame. Lea los bytes de la imagen primero, añádalos a la colección de imágenes de la presentación y luego cree el marco.
import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.IConnector;
import org.aspose.slides.foss.ITable;
import org.aspose.slides.foss.IPPImage;
import org.aspose.slides.foss.ILayoutSlide;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;
import java.nio.file.Files;
import java.nio.file.Paths;
try (Presentation prs = new Presentation()) {
byte[] imageData = Files.readAllBytes(Paths.get("logo.png"));
IPPImage image = prs.getImages().addImage(imageData);
ISlide slide = prs.getSlides().get(0);
slide.getShapes().addPictureFrame(
ShapeType.RECTANGLE, // bounding shape type
50, 50, // x, y in points
200, 150, // width, height in points
image
);
prs.save("with-image.pptx", SaveFormat.PPTX);
}Problemas comunes y soluciones
La forma aparece fuera del área visible de la diapositiva
Las diapositivas son de 720 × 540 puntos por defecto. Los valores de x o y fuera de esos límites colocan la forma fuera de la diapositiva. Mantenga x < 720 y y < 540, y asegúrese de x + width <= 720 y y + height <= 540.
NullPointerException al leer el texto de la forma
addAutoShape() devuelve el objeto shape directamente. Si ves null, verifica que no estés descartando el valor de retorno. También verifica que getTextFrame() no sea nulo antes de leer el texto.
El texto de la celda de la tabla está vacío después de la asignación
El método correcto es .getTextFrame().setText(value). Acceda a las celdas como table.getRows().get(rowIndex).get(colIndex).getTextFrame().setText("value").
Preguntas frecuentes
¿Cuántas formas puedo añadir a una diapositiva?
No hay un límite impuesto por la biblioteca. Los límites prácticos dependen del tamaño del archivo y de la capacidad de renderizado de su visor PPTX de destino.
¿Puedo cambiar la posición de una forma después de agregarla?
Sí. El objeto shape devuelto por addAutoShape() tiene propiedades de posición y tamaño a través de getShapeFrame().
¿Se admiten los gráficos?
No. Los gráficos, SmartArt y los objetos OLE no están implementados en esta edición y generan UnsupportedOperationException.