Πώς να προσθέσετε σχήματα στο PowerPoint με Java
Aspose.Slides FOSS for Java υποστηρίζει την προσθήκη AutoShapes, Tables, Connectors και PictureFrames σε διαφάνειες παρουσίασης. Όλοι οι τύποι σχημάτων προστίθενται μέσω της συλλογής slide.getShapes().
Οδηγός βήμα προς βήμα
Βήμα 1: Προσθέστε την εξάρτηση Maven
<dependency>
<groupId>org.aspose.slides.foss</groupId>
<artifactId>aspose-slides-foss</artifactId>
<version>1.0.0</version>
</dependency>Βήμα 2: Δημιουργία παρουσίασης
Πάντα χρησιμοποιήστε το try-with-resources για τη διαχείριση των πόρων.
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);
}Βήμα 3: Προσθήκη AutoShape
slide.getShapes().addAutoShape(shapeType, x, y, width, height) τοποθετεί ένα σχήμα στη δεδομένη θέση και μέγεθος (όλα σε σημεία). Χρησιμοποιήστε τις σταθερές ShapeType για να επιλέξετε το σχήμα.
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);
}Βήμα 4: Προσθήκη πίνακα
slide.getShapes().addTable(x, y, colWidths, rowHeights) δημιουργεί έναν πίνακα στην καθορισμένη θέση. Τα πλάτη των στηλών και τα ύψη των γραμμών είναι πίνακες τιμών σημείων.
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);
}Βήμα 5: Προσθήκη συνδέσμου
Οι συνδέτες συνδέουν δύο σχήματα οπτικά. Δημιουργήστε πρώτα τα σχήματα, στη συνέχεια προσθέστε έναν σύνδεσμο και ορίστε τα σημεία έναρξης και λήξης του.
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);
}Οι δείκτες των σημείων σύνδεσης αριθμούνται 0‑3 για ένα ορθογώνιο: πάνω=0, αριστερά=1, κάτω=2, δεξιά=3.
Βήμα 6: Προσθήκη Πλαισίου Εικόνας
Ενσωματώστε μια εικόνα και προσθέστε την στη διαφάνεια ως PictureFrame. Διαβάστε πρώτα τα byte της εικόνας, προσθέστε τα στη συλλογή εικόνων της παρουσίασης, στη συνέχεια δημιουργήστε το πλαίσιο.
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);
}Κοινά προβλήματα και διορθώσεις
Το σχήμα εμφανίζεται εκτός της ορατής περιοχής της διαφάνειας
Οι διαφάνειες είναι 720 × 540 σημεία από προεπιλογή. Οι τιμές του x ή του y εκτός αυτών των ορίων τοποθετούν το σχήμα εκτός διαφάνειας. Διατηρήστε το x < 720 και το y < 540, και εξασφαλίστε το x + width <= 720 και το y + height <= 540.
NullPointerException κατά την ανάγνωση κειμένου σχήματος
addAutoShape() επιστρέφει το αντικείμενο σχήματος άμεσα. Εάν δείτε null, ελέγξτε ότι δεν απορρίπτετε την τιμή επιστροφής. Επίσης, βεβαιωθείτε ότι το getTextFrame() δεν είναι null πριν διαβάσετε το κείμενο.
Το κείμενο του κελιού του πίνακα είναι κενό μετά την ανάθεση
Η σωστή μέθοδος είναι .getTextFrame().setText(value). Πρόσβαση στα κελιά ως table.getRows().get(rowIndex).get(colIndex).getTextFrame().setText("value").
Συχνές Ερωτήσεις
Πόσα σχήματα μπορώ να προσθέσω σε μια διαφάνεια;
Δεν υπάρχει περιορισμός που να επιβάλλεται από τη βιβλιοθήκη. Οι πρακτικοί περιορισμοί εξαρτώνται από το μέγεθος του αρχείου και την ικανότητα απόδοσης του προγράμματος προβολής PPTX-στόχου.
Μπορώ να αλλάξω τη θέση ενός σχήματος μετά την προσθήκη του;
Ναι. Το αντικείμενο σχήματος που επιστρέφεται από addAutoShape() έχει ιδιότητες θέσης και μεγέθους μέσω getShapeFrame().
Υποστηρίζονται τα διαγράμματα;
Όχι. Τα διαγράμματα, το SmartArt και τα αντικείμενα OLE δεν έχουν υλοποιηθεί σε αυτήν την έκδοση και προκαλούν UnsupportedOperationException.