Ako pridať tvary do PowerPointu v Jave
Aspose.Slides FOSS for Java podporuje pridávanie AutoShapes, Tables, Connectors a PictureFrames do snímok prezentácie. Všetky typy tvarov sa pridávajú prostredníctvom kolekcie slide.getShapes().
Krok za krokom sprievodca
Krok 1: Pridajte Maven závislosť
<dependency>
<groupId>org.aspose.slides.foss</groupId>
<artifactId>aspose-slides-foss</artifactId>
<version>1.0.0</version>
</dependency>Krok 2: Vytvoriť prezentáciu
Vždy používajte try-with-resources na správu zdrojov.
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: Pridať AutoShape
slide.getShapes().addAutoShape(shapeType, x, y, width, height) umiestni tvar na zadanú pozíciu a veľkosť (všetko v bodoch). Použite konštanty ShapeType na výber tvaru.
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: Pridať tabuľku
slide.getShapes().addTable(x, y, colWidths, rowHeights) vytvára tabuľku na určenom mieste. Šírky stĺpcov a výšky riadkov sú polia hodnôt v bodoch.
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: Pridať konektor
Konektory vizuálne spájajú dva tvary. Najprv vytvorte tvary, potom pridajte konektor a nastavte jeho počiatočné a koncové body pripojenia.
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);
}Indexy miest pripojenia sú očíslované 0-3 pre obdĺžnik: top=0, left=1, bottom=2, right=3.
Krok 6: Pridať rámik obrázka
Vložte obrázok a pridajte ho do snímky ako PictureFrame. Najprv prečítajte bajty obrázka, pridajte ich do kolekcie obrázkov prezentácie a potom vytvorte rámec.
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);
}Bežné problémy a riešenia
Tvar sa objavuje mimo viditeľnej oblasti snímky
Snímky majú predvolene 720 × 540 bodov. Hodnoty x alebo y mimo týchto hraníc umiestnia tvar mimo snímky. Zachovajte x < 720 a y < 540 a zabezpečte x + width <= 720 a y + height <= 540.
NullPointerException pri čítaní textu tvaru
addAutoShape() vracia objekt tvaru priamo. Ak vidíte null, skontrolujte, že neodstraňujete návratovú hodnotu. Tiež overte, že getTextFrame() nie je null pred čítaním textu.
Text bunky tabuľky je po priradení prázdny
Správna metóda je .getTextFrame().setText(value). Prístup k bunkám ako table.getRows().get(rowIndex).get(colIndex).getTextFrame().setText("value").
Často kladené otázky
Koľko tvarov môžem pridať na snímku?
Neexistuje žiadny limit uložený knižnicou. Praktické limity závisia od veľkosti súboru a schopnosti vykresľovania cieľového prehliadača PPTX.
Môžem zmeniť pozíciu tvaru po jeho pridávaní?
Áno. Objekt tvaru vrátený pomocou addAutoShape() má vlastnosti polohy a veľkosti prostredníctvom getShapeFrame().
Sú grafy podporované?
Nie. Grafy, SmartArt a OLE objekty nie sú v tejto edícii implementované a vyvolávajú UnsupportedOperationException.