Jak dodać kształty do PowerPoint w Javie
Aspose.Slides FOSS for Java obsługuje dodawanie AutoShapes, Tables, Connectors i PictureFrames do slajdów prezentacji. Wszystkie typy kształtów są dodawane za pośrednictwem kolekcji slide.getShapes().
Przewodnik krok po kroku
Krok 1: Dodaj zależność Maven
<dependency>
<groupId>org.aspose.slides.foss</groupId>
<artifactId>aspose-slides-foss</artifactId>
<version>1.0.0</version>
</dependency>Krok 2: Utwórz prezentację
Zawsze używaj try-with-resources do zarządzania zasobami.
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);
}Krok 3: Dodaj AutoShape
slide.getShapes().addAutoShape(shapeType, x, y, width, height) umieszcza kształt w podanej pozycji i rozmiarze (wszystko w punktach). Użyj stałych ShapeType, aby wybrać kształt.
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);
}Krok 4: Dodaj tabelę
slide.getShapes().addTable(x, y, colWidths, rowHeights) tworzy tabelę w określonej pozycji. Szerokości kolumn i wysokości wierszy są tablicami wartości w punktach.
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);
}Krok 5: Dodaj łącznik
Łączniki łączą dwa kształty wizualnie. Najpierw utwórz kształty, a następnie dodaj łącznik i ustaw jego punkty początkowe i końcowe.
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);
}Indeksy miejsc połączeń są numerowane od 0 do 3 dla prostokąta: góra=0, lewo=1, dół=2, prawo=3.
Krok 6: Dodaj ramkę obrazu
Osadź obraz i dodaj go do slajdu jako PictureFrame. Najpierw odczytaj bajty obrazu, dodaj je do kolekcji obrazów prezentacji, a następnie utwórz ramkę.
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);
}Typowe problemy i rozwiązania
Kształt pojawia się poza widocznym obszarem slajdu
Slajdy mają domyślnie 720 × 540 punktów. Wartości x lub y poza tymi granicami umieszczają kształt poza slajdem. Zachowaj x < 720 i y < 540, oraz zapewnij x + width <= 720 i y + height <= 540.
NullPointerException podczas odczytywania tekstu kształtu
addAutoShape() zwraca obiekt kształtu bezpośrednio. Jeśli widzisz null, sprawdź, czy nie odrzucasz zwracanej wartości. Również zweryfikuj, że getTextFrame() nie jest nullem przed odczytaniem tekstu.
Tekst komórki tabeli jest pusty po przypisaniu
Poprawna metoda to .getTextFrame().setText(value). Dostęp do komórek jako table.getRows().get(rowIndex).get(colIndex).getTextFrame().setText("value").
Najczęściej zadawane pytania
Ile kształtów mogę dodać do slajdu?
Nie ma ograniczenia narzuconego przez bibliotekę. Praktyczne limity zależą od rozmiaru pliku i możliwości renderowania Twojego docelowego podglądu PPTX.
Czy mogę zmienić pozycję kształtu po jego dodaniu?
Tak. Obiekt kształtu zwrócony przez addAutoShape() ma właściwości pozycji i rozmiaru za pośrednictwem getShapeFrame().
Czy wykresy są obsługiwane?
Nie. Wykresy, SmartArt i obiekty OLE nie są zaimplementowane w tej edycji i generują UnsupportedOperationException.