Come aggiungere forme a PowerPoint in Java
Aspose.Slides FOSS for Java supporta l’aggiunta di AutoShapes, Tables, Connectors e PictureFrames alle diapositive della presentazione. Tutti i tipi di forma vengono aggiunti tramite la collezione slide.getShapes().
Guida passo-passo
Passo 1: Aggiungi la dipendenza Maven
<dependency>
<groupId>org.aspose.slides.foss</groupId>
<artifactId>aspose-slides-foss</artifactId>
<version>1.0.0</version>
</dependency>Passo 2: Crea una presentazione
Usa sempre try-with-resources per gestire le risorse.
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);
}Passo 3: Aggiungi un AutoShape
slide.getShapes().addAutoShape(shapeType, x, y, width, height) posiziona una forma nella posizione e dimensione specificate (tutte in punti). Usa le costanti ShapeType per selezionare 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);
}Passo 4: Aggiungi una tabella
slide.getShapes().addTable(x, y, colWidths, rowHeights) crea una tabella nella posizione specificata. Le larghezze delle colonne e le altezze delle righe sono array di valori in punti.
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);
}Passo 5: Aggiungi un connettore
I connettori collegano visivamente due forme. Crea prima le forme, quindi aggiungi un connettore e imposta i punti di connessione di inizio e fine.
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);
}Gli indici dei punti di connessione sono numerati da 0 a 3 per un rettangolo: top=0, left=1, bottom=2, right=3.
Passo 6: Aggiungi una cornice per foto
Incorpora un’immagine e aggiungila alla diapositiva come PictureFrame. Leggi prima i byte dell’immagine, aggiungili alla collezione di immagini della presentazione, quindi crea il frame.
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);
}Problemi comuni e soluzioni
La forma appare al di fuori dell’area visibile della diapositiva
Le diapositive sono 720 × 540 punti per impostazione predefinita. I valori di x o y al di fuori di questi limiti posizionano la forma fuori dalla diapositiva. Mantieni x < 720 e y < 540, e assicurati x + width <= 720 e y + height <= 540.
NullPointerException quando si legge il testo della forma
addAutoShape() restituisce direttamente l’oggetto shape. Se vedi null, verifica di non scartare il valore restituito. Inoltre verifica che getTextFrame() non sia null prima di leggere il testo.
Il testo della cella della tabella è vuoto dopo l’assegnazione
Il metodo corretto è .getTextFrame().setText(value). Accedi alle celle come table.getRows().get(rowIndex).get(colIndex).getTextFrame().setText("value").
Domande frequenti
Quante forme posso aggiungere a una diapositiva?
Non esiste un limite imposto dalla libreria. I limiti pratici dipendono dalla dimensione del file e dalla capacità di rendering del visualizzatore PPTX di destinazione.
Posso modificare la posizione di una forma dopo averla aggiunta?
Sì. L’oggetto shape restituito da addAutoShape() ha proprietà di posizione e dimensione tramite getShapeFrame().
I grafici sono supportati?
No. I grafici, SmartArt e gli oggetti OLE non sono implementati in questa edizione e generano UnsupportedOperationException.