Wie man Formen zu PowerPoint in Java hinzufügt
Aspose.Slides FOSS for Java unterstützt das Hinzufügen von AutoShapes, Tables, Connectors und PictureFrames zu Präsentationsfolien. Alle Formtypen werden über die slide.getShapes()-Sammlung hinzugefügt.
Schritt-für-Schritt-Anleitung
Schritt 1: Maven-Abhängigkeit hinzufügen
<dependency>
<groupId>org.aspose.slides.foss</groupId>
<artifactId>aspose-slides-foss</artifactId>
<version>1.0.0</version>
</dependency>Schritt 2: Präsentation erstellen
Verwenden Sie immer try-with-resources, um Ressourcen zu verwalten.
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);
}Schritt 3: AutoShape hinzufügen
slide.getShapes().addAutoShape(shapeType, x, y, width, height) platziert eine Form an der angegebenen Position und Größe (alle in Punkten). Verwenden Sie ShapeType Konstanten, um die Form auszuwählen.
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);
}Schritt 4: Tabelle hinzufügen
slide.getShapes().addTable(x, y, colWidths, rowHeights) erstellt eine Tabelle an der angegebenen Position. Spaltenbreiten und Zeilenhöhen sind Arrays von Punktwerten.
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);
}Schritt 5: Connector hinzufügen
Verbinder verknüpfen zwei Formen visuell. Erstellen Sie zuerst die Formen, fügen Sie dann einen Verbinder hinzu und setzen Sie dessen Start‑ und Endanschlusspunkte.
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);
}Verbindungsstellen-Indizes werden für ein Rechteck von 0‑3 nummeriert: oben=0, links=1, unten=2, rechts=3.
Schritt 6: Bildrahmen hinzufügen
Betten Sie ein Bild ein und fügen Sie es der Folie als PictureFrame hinzu. Lesen Sie zuerst die Bild‑Bytes, fügen Sie sie zur Bildsammlung der Präsentation hinzu und erstellen Sie dann den Rahmen.
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);
}Allgemeine Probleme und Lösungen
Form erscheint außerhalb des sichtbaren Folienbereichs
Folien sind standardmäßig 720 × 540 Punkte. Werte von x oder y, die diese Grenzen überschreiten, platzieren die Form außerhalb der Folie. Behalte x < 720 und y < 540 bei und stelle sicher, dass x + width <= 720 und y + height <= 540.
NullPointerException beim Lesen von Formtext
addAutoShape() gibt das Shape‑Objekt direkt zurück. Wenn Sie null sehen, prüfen Sie, dass Sie den Rückgabewert nicht verwerfen. Überprüfen Sie außerdem, dass getTextFrame() nicht null ist, bevor Sie den Text lesen.
Tabellenzellen-Text ist nach Zuweisung leer
Die korrekte Methode ist .getTextFrame().setText(value). Greifen Sie auf Zellen zu mit table.getRows().get(rowIndex).get(colIndex).getTextFrame().setText("value").
Häufig gestellte Fragen
Wie viele Formen kann ich zu einer Folie hinzufügen?
Es gibt keine von der Bibliothek auferlegte Grenze. Praktische Grenzen hängen von der Dateigröße und der Rendering‑Fähigkeit Ihres Ziel‑PPTX‑Viewers ab.
Kann ich die Position einer Form ändern, nachdem ich sie hinzugefügt habe?
Ja. Das Shape‑Objekt, das von addAutoShape() zurückgegeben wird, hat Positions‑ und Größen‑Eigenschaften über getShapeFrame().
Werden Diagramme unterstützt?
Nein. Diagramme, SmartArt und OLE‑Objekte sind in dieser Ausgabe nicht implementiert und lösen UnsupportedOperationException aus.