Hur man lägger till former i PowerPoint i Java

Hur man lägger till former i PowerPoint i Java

Aspose.Slides FOSS for Java stöder att lägga till AutoShapes, Tables, Connectors och PictureFrames till presentationsbilder. Alla formtyper läggs till via slide.getShapes()-samlingen.

Steg-för-steg-guide

Steg 1: Lägg till Maven‑beroendet

<dependency>
  <groupId>org.aspose.slides.foss</groupId>
  <artifactId>aspose-slides-foss</artifactId>
  <version>1.0.0</version>
</dependency>

Steg 2: Skapa en presentation

Använd alltid try-with-resources för att hantera resurser.

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);
}

Steg 3: Lägg till en AutoShape

slide.getShapes().addAutoShape(shapeType, x, y, width, height) placerar en form på den angivna positionen och storleken (alla i punkter). Använd ShapeType‑konstanter för att välja formen.

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);
}

Steg 4: Lägg till en tabell

slide.getShapes().addTable(x, y, colWidths, rowHeights) skapar en tabell på den angivna positionen. Kolumnbredder och radhöjder är arrayer av punktvärden.

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);
}

Steg 5: Lägg till en anslutning

Kopplingar länkar två former visuellt. Skapa formerna först, lägg sedan till en koppling och ange dess start- och slutanslutningspunkter.

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);
}

Anslutningsplatsindex är numrerade 0‑3 för en rektangel: top=0, left=1, bottom=2, right=3.


Steg 6: Lägg till en bildram

Bädda in en bild och lägg till den på bilden som en PictureFrame. Läs först bildens byte, lägg till dem i presentationens bildsamling och skapa sedan ramen.

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);
}

Vanliga problem och lösningar

Formen visas utanför det synliga bildområdet

Bilder är som standard 720 × 540 punkter. Värden för x eller y som ligger utanför dessa gränser placerar formen utanför bilden. Behåll x < 720 och y < 540, och säkerställ x + width <= 720 och y + height <= 540.

NullPointerException när du läser formtext

addAutoShape() returnerar shape‑objektet direkt. Om du ser null, kontrollera att du inte kastar bort returvärdet. Verifiera också att getTextFrame() inte är null innan du läser texten.

Tabellcellens text är tom efter tilldelning

Den korrekta metoden är .getTextFrame().setText(value). Åtkomst till celler som table.getRows().get(rowIndex).get(colIndex).getTextFrame().setText("value").


Vanliga frågor

Hur många former kan jag lägga till på en bild?

Det finns ingen begränsning som påläggs av biblioteket. Praktiska begränsningar beror på filstorlek och renderingskapaciteten hos din mål‑PPTX‑visare.

Kan jag ändra en formens position efter att ha lagt till den?

Ja. Shape-objektet som returneras av addAutoShape() har positions- och storleksegenskaper via getShapeFrame().

Är diagram stödda?

Nej. Diagram, SmartArt och OLE‑objekt är inte implementerade i den här utgåvan och ger UnsupportedOperationException.


Se även

 Svenska