Com afegir formes a PowerPoint amb Java

Com afegir formes a PowerPoint amb Java

Aspose.Slides FOSS for Java admet afegir AutoShapes, Tables, Connectors i PictureFrames a les diapositives de la presentació. Tots els tipus de formes s’afegeixen a través de la col·lecció slide.getShapes().

Guia pas a pas

Pas 1: Afegeix la dependència Maven

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

Pas 2: Crea una presentació

Utilitzeu sempre try-with-resources per gestionar els recursos.

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

Pas 3: Afegeix una AutoShape

slide.getShapes().addAutoShape(shapeType, x, y, width, height) col·loca una forma a la posició i mida indicades (totes en punts). Utilitzeu les constants ShapeType per seleccionar la forma.

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

Pas 4: Afegeix una taula

slide.getShapes().addTable(x, y, colWidths, rowHeights) crea una taula a la posició especificada. Les amplades de les columnes i les alçades de les files són matrius de valors en punts.

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

Pas 5: Afegeix un connector

Els connectors enllacen visualment dues formes. Creeu primer les formes, després afegiu un connector i establiu els seus punts de connexió d’inici i final.

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

Els índexs dels punts de connexió es numeren del 0 al 3 per a un rectangle: superior=0, esquerre=1, inferior=2, dret=3.


Pas 6: Afegeix un marc de foto

Incrusta una imatge i afegeix-la a la diapositiva com a PictureFrame. Llegeix primer els bytes de la imatge, afegeix-los a la col·lecció d’imatges de la presentació i, a continuació, crea el marc.

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

Problemes comuns i solucions

La forma apareix fora de l’àrea visible de la diapositiva

Les diapositives són de 720 × 540 punts per defecte. Els valors de x o y fora d’aquests límits col·loquen la forma fora de la diapositiva. Mantingueu x < 720 i y < 540, i assegureu x + width <= 720 i y + height <= 540.

NullPointerException en llegir el text de la forma

addAutoShape() retorna l’objecte shape directament. Si veus null, comprova que no estàs descartant el valor de retorn. També verifica que getTextFrame() no sigui nul abans de llegir el text.

El text de la cel·la de la taula és buit després de l’assignació

El mètode correcte és .getTextFrame().setText(value). Accediu a les cel·les com table.getRows().get(rowIndex).get(colIndex).getTextFrame().setText("value").


Preguntes freqüents

Quantes formes puc afegir a una diapositiva?

No hi ha cap límit imposat per la biblioteca. Els límits pràctics depenen de la mida del fitxer i de la capacitat de renderització del visualitzador PPTX de destinació.

Puc canviar la posició d’una forma després d’afegir-la?

Sí. L’objecte shape retornat per addAutoShape() té propietats de posició i mida a través de getShapeFrame().

S’admeten els gràfics?

No. Els gràfics, SmartArt i els objectes OLE no s’implementen en aquesta edició i generen UnsupportedOperationException.


Vegeu també

 Català