Cum să adăugați forme în PowerPoint în Java
Aspose.Slides FOSS for Java acceptă adăugarea AutoShapes, Tables, Connectors și PictureFrames la diapozitivele prezentării. Toate tipurile de forme sunt adăugate prin colecția slide.getShapes().
Ghid pas cu pas
Pasul 1: Adăugați dependența Maven
<dependency>
<groupId>org.aspose.slides.foss</groupId>
<artifactId>aspose-slides-foss</artifactId>
<version>1.0.0</version>
</dependency>Pasul 2: Crearea unei prezentări
Utilizați întotdeauna try-with-resources pentru a gestiona resursele.
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);
}Pasul 3: Adăugaţi un AutoShape
slide.getShapes().addAutoShape(shapeType, x, y, width, height) plasează o formă la poziția și dimensiunea date (toate în puncte). Folosiți constantele ShapeType pentru a selecta 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);
}Pasul 4: Adăugați un tabel
slide.getShapes().addTable(x, y, colWidths, rowHeights) creează un tabel la poziția specificată. Lățimile coloanelor și înălțimile rândurilor sunt tablouri de valori în puncte.
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);
}Pasul 5: Adăugați un Conector
Conectorii leagă vizual două forme. Creați formele mai întâi, apoi adăugați un conector și setați punctele de conexiune de început și de sfârșit.
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);
}Indiciile locațiilor de conectare sunt numerotate 0‑3 pentru un dreptunghi: top=0, left=1, bottom=2, right=3.
Pasul 6: Adaugă un cadru foto
Încorporează o imagine și adaugă‑o pe diapozitiv ca un PictureFrame. Citește mai întâi octeții imaginii, adaugă-i în colecția de imagini a prezentării, apoi creează cadrul.
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);
}Probleme comune și soluții
Forma apare în afara zonei vizibile a diapozitivului
Diapozitivele sunt în mod implicit 720 x 540 puncte. Valorile x sau y dincolo de aceste limite plasează forma în afara diapozitivului. Păstrați x < 720 și y < 540 și asigurați x + width <= 720 și y + height <= 540.
NullPointerException când se citește textul formei
addAutoShape() returnează obiectul shape direct. Dacă vedeți null, verificați că nu renunțați la valoarea returnată. De asemenea, verificați că getTextFrame() nu este null înainte de a citi textul.
Textul celulei din tabel este gol după atribuire
Metoda corectă este .getTextFrame().setText(value). Accesaţi celulele ca table.getRows().get(rowIndex).get(colIndex).getTextFrame().setText("value").
Întrebări frecvente
Câte forme pot adăuga pe un diapozitiv?
Nu există o limită impusă de bibliotecă. Limitele practice depind de dimensiunea fișierului și de capacitatea de redare a vizualizatorului PPTX țintă.
Pot să schimb poziția unei forme după ce am adăugat-o?
Da. Obiectul shape returnat de addAutoShape() are proprietăți de poziție și dimensiune prin getShapeFrame().
Sunt graficele acceptate?
Nu. Graficele, SmartArt și obiectele OLE nu sunt implementate în această ediție și generează UnsupportedOperationException.