Come aggiungere forme a PowerPoint in Java

Come aggiungere forme a PowerPoint in Java

Aspose.Slides FOSS for Java supporta l’aggiunta di AutoShapes, Tables, Connectors e PictureFrames alle diapositive della presentazione. Tutti i tipi di forma vengono aggiunti tramite la collezione slide.getShapes().

Guida passo-passo

Passo 1: Aggiungi la dipendenza Maven

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

Passo 2: Crea una presentazione

Usa sempre try-with-resources per gestire le risorse.

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

Passo 3: Aggiungi un AutoShape

slide.getShapes().addAutoShape(shapeType, x, y, width, height) posiziona una forma nella posizione e dimensione specificate (tutte in punti). Usa le costanti ShapeType per selezionare 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);
}

Passo 4: Aggiungi una tabella

slide.getShapes().addTable(x, y, colWidths, rowHeights) crea una tabella nella posizione specificata. Le larghezze delle colonne e le altezze delle righe sono array di valori in punti.

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

Passo 5: Aggiungi un connettore

I connettori collegano visivamente due forme. Crea prima le forme, quindi aggiungi un connettore e imposta i punti di connessione di inizio e fine.

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

Gli indici dei punti di connessione sono numerati da 0 a 3 per un rettangolo: top=0, left=1, bottom=2, right=3.


Passo 6: Aggiungi una cornice per foto

Incorpora un’immagine e aggiungila alla diapositiva come PictureFrame. Leggi prima i byte dell’immagine, aggiungili alla collezione di immagini della presentazione, quindi crea il frame.

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

Problemi comuni e soluzioni

La forma appare al di fuori dell’area visibile della diapositiva

Le diapositive sono 720 × 540 punti per impostazione predefinita. I valori di x o y al di fuori di questi limiti posizionano la forma fuori dalla diapositiva. Mantieni x < 720 e y < 540, e assicurati x + width <= 720 e y + height <= 540.

NullPointerException quando si legge il testo della forma

addAutoShape() restituisce direttamente l’oggetto shape. Se vedi null, verifica di non scartare il valore restituito. Inoltre verifica che getTextFrame() non sia null prima di leggere il testo.

Il testo della cella della tabella è vuoto dopo l’assegnazione

Il metodo corretto è .getTextFrame().setText(value). Accedi alle celle come table.getRows().get(rowIndex).get(colIndex).getTextFrame().setText("value").


Domande frequenti

Quante forme posso aggiungere a una diapositiva?

Non esiste un limite imposto dalla libreria. I limiti pratici dipendono dalla dimensione del file e dalla capacità di rendering del visualizzatore PPTX di destinazione.

Posso modificare la posizione di una forma dopo averla aggiunta?

Sì. L’oggetto shape restituito da addAutoShape() ha proprietà di posizione e dimensione tramite getShapeFrame().

I grafici sono supportati?

No. I grafici, SmartArt e gli oggetti OLE non sono implementati in questa edizione e generano UnsupportedOperationException.


Vedi anche

 Italiano