Comment ajouter des formes à PowerPoint en Java

Comment ajouter des formes à PowerPoint en Java

Aspose.Slides FOSS for Java prend en charge l’ajout d’AutoShapes, de Tables, de Connectors et de PictureFrames aux diapositives de présentation. Tous les types de formes sont ajoutés via la collection slide.getShapes().

Guide étape par étape

Étape 1 : Ajouter la dépendance Maven

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

Étape 2 : Créer une présentation

Utilisez toujours try-with-resources pour gérer les ressources.

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

Étape 3 : Ajouter une AutoShape

slide.getShapes().addAutoShape(shapeType, x, y, width, height) place une forme à la position et à la taille données (toutes en points). Utilisez les constantes ShapeType pour sélectionner la forme.

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

Étape 4 : Ajouter un tableau

slide.getShapes().addTable(x, y, colWidths, rowHeights) crée un tableau à la position spécifiée. Les largeurs de colonnes et les hauteurs de lignes sont des tableaux de valeurs en points.

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

Étape 5 : Ajouter un connecteur

Les connecteurs relient visuellement deux formes. Créez d’abord les formes, puis ajoutez un connecteur et définissez ses points de connexion de départ et d’arrivée.

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

Les indices des sites de connexion sont numérotés 0-3 pour un rectangle : haut=0, gauche=1, bas=2, droite=3.


Étape 6 : Ajouter un cadre photo

Intégrez une image et ajoutez‑la à la diapositive en tant que PictureFrame. Lisez d’abord les octets de l’image, ajoutez‑les à la collection d’images de la présentation, puis créez le cadre.

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

Problèmes courants et solutions

Forme apparaît en dehors de la zone visible de la diapositive

Les diapositives mesurent 720 × 540 points par défaut. Les valeurs de x ou y au‑delà de ces limites placent la forme hors de la diapositive. Conservez x < 720 et y < 540, et assurez‑vous que x + width <= 720 et y + height <= 540.

NullPointerException lors de la lecture du texte de forme

addAutoShape() renvoie directement l’objet shape. Si vous voyez null, vérifiez que vous ne jetez pas la valeur de retour. Vérifiez également que getTextFrame() n’est pas nul avant de lire le texte.

Le texte de la cellule du tableau est vide après l’affectation

La méthode correcte est .getTextFrame().setText(value). Accédez aux cellules comme table.getRows().get(rowIndex).get(colIndex).getTextFrame().setText("value").


Foire aux questions

Combien de formes puis‑je ajouter à une diapositive ?

Il n’y a pas de limite imposée par la bibliothèque. Les limites pratiques dépendent de la taille du fichier et de la capacité de rendu de votre visionneuse PPTX cible.

Puis-je modifier la position d’une forme après l’avoir ajoutée ?

Oui. L’objet shape renvoyé par addAutoShape() possède des propriétés de position et de taille via getShapeFrame().

Les graphiques sont-ils pris en charge ?

Non. Les graphiques, SmartArt et les objets OLE ne sont pas implémentés dans cette édition et déclenchent UnsupportedOperationException.


Voir aussi

 Français