Créer une présentation MS PowerPoint en Java

Création d'une présentation MS PowerPoint en Java

1. introduction

Dans cet article, nous verrons comment créer une présentation à l'aide deApache POI.

Cette bibliothèque nous donne la possibilité de créer des présentations PowerPoint, de lire des présentations existantes et d’en modifier le contenu.

2. Dépendances Maven

Pour commencer, nous devons ajouter les dépendances suivantes dans nospom.xml:


    org.apache.poi
    poi
    3.17


    org.apache.poi
    poi-ooxml
    3.17

La dernière version des deuxlibraries peut être téléchargée depuis Maven Central.

3. Apache POI

LeApache POI library supports both .ppt and .pptx files et il fournit l'implémentation HSLF pour le format de fichier Powerpoint '97 (-2007) et le XSLF pour le format de fichier OOXML PowerPoint 2007.

Puisqu'une interface commune n'existe pas pour les deux implémentations,we have to remember to use the XMLSlideShow, XSLFSlide and XSLFTextShape classes when working with the newer .pptx file format.

Et, lorsqu'il est nécessaire de travailler avec l'ancien format.ppt, utilisez les classesHSLFSlideShow,HSLFSlide etHSLFTextParagraph.

Nous utiliserons le nouveau format de fichier.pptx dans nos exemples, et la première chose à faire est de créer une nouvelle présentation, d’y ajouter une diapositive (peut-être en utilisant une mise en page prédéfinie) et de l’enregistrer.

Une fois que ces opérations sont claires, nous pouvons commencer à travailler avec des images, du texte et des tableaux.

3.1. Créer une nouvelle présentation

Commençons par créer la nouvelle présentation:

XMLSlideShow ppt = new XMLSlideShow();
ppt.createSlide();

3.2. Ajouter une nouvelle diapositive

Lorsque vous ajoutez une nouvelle diapositive à une présentation, vous pouvez également choisir de la créer à partir d'une mise en page prédéfinie. Pour y parvenir, il faut d'abord récupérer lesXSLFSlideMaster qui contiennent les layouts (le premier est le master par défaut):

XSLFSlideMaster defaultMaster = ppt.getSlideMasters().get(0);

Maintenant, nous pouvons récupérer lesXSLFSlideLayout et l'utiliser lors de la création de la nouvelle diapositive:

XSLFSlideLayout layout
  = defaultMaster.getLayout(SlideLayout.TITLE_AND_CONTENT);
XSLFSlide slide = ppt.createSlide(layout);

Voyons comment remplir des espaces réservés dans un modèle:

XSLFTextShape titleShape = slide.getPlaceholder(0);
XSLFTextShape contentShape = slide.getPlaceholder(1);

N'oubliez pas que chaque modèle a ses espaces réservés, des instances de la sous-classeXSLFAutoShape, qui peuvent différer en nombre d'un modèle à l'autre.

Voyons comment nous pouvons récupérer rapidement tous les espaces réservés d'une diapositive:

for (XSLFShape shape : slide.getShapes()) {
    if (shape instanceof XSLFAutoShape) {
        // this is a template placeholder
    }
}

3.3. Enregistrer une présentation

Une fois que nous avons créé le diaporama, l'étape suivante consiste à l'enregistrer:

FileOutputStream out = new FileOutputStream("powerpoint.pptx");
ppt.write(out);
out.close();

4. Travailler avec des objets

Maintenant que nous avons vu comment créer une nouvelle présentation, y ajouter une diapositive (en utilisant ou non un modèle prédéfini) et l'enregistrer, nous pouvons commencer à ajouter du texte, des images, des liens et des tableaux.

Commençons par le texte.

4.1. Text

Lorsque vous travaillez avec du texte dans une présentation, comme dans MS PowerPoint, nous devons créer la zone de texte dans une diapositive, ajouter un paragraphe, puis ajouter le texte au paragraphe:

XSLFTextBox shape = slide.createTextBox();
XSLFTextParagraph p = shape.addNewTextParagraph();
XSLFTextRun r = p.addNewTextRun();
r.setText("example");
r.setFontColor(Color.green);
r.setFontSize(24.);

Lors de la configuration duXSLFTextRun, il est possible de personnaliser son style en choisissant la famille de polices et si le texte doit être en gras, en italique ou souligné.

Lors de l'ajout de texte à une présentation, il peut parfois être utile d'ajouter des hyperliens.

Une fois que nous avons créé l'objetXSLFTextRun, nous pouvons maintenant ajouter un lien:

XSLFHyperlink link = r.createHyperlink();
link.setAddress("http://www.example.com");

4.3. Images

Nous pouvons aussi ajouter des images:

byte[] pictureData = IOUtils.toByteArray(
  new FileInputStream("logo-leaf.png"));

XSLFPictureData pd
  = ppt.addPicture(pictureData, PictureData.PictureType.PNG);
XSLFPictureShape picture = slide.createPicture(pd);

Cependant,without a proper configuration, the image will be placed in the top left corner of the slide. Pour le placer correctement, nous devons configurer son point d'ancrage:

picture.setAnchor(new Rectangle(320, 230, 100, 92));

LeXSLFPictureShape accepte unRectangle comme point d'ancrage, ce qui nous permet de configurer les coordonnées x / y avec les deux premiers paramètres, et la largeur / hauteur de l'image avec les deux derniers.

4.4. Listes

Le texte, à l'intérieur d'une présentation, est souvent représenté sous la forme d'une liste, numérotée ou non.

Définissons maintenant une liste de puces:

XSLFTextShape content = slide.getPlaceholder(1);
XSLFTextParagraph p1 = content.addNewTextParagraph();
p1.setIndentLevel(0);
p1.setBullet(true);
r1 = p1.addNewTextRun();
r1.setText("Bullet");

De même, nous pouvons définir une liste numérotée:

XSLFTextParagraph p2 = content.addNewTextParagraph();
p2.setBulletAutoNumber(AutoNumberingScheme.alphaLcParenRight, 1);
p2.setIndentLevel(1);
XSLFTextRun r2 = p2.addNewTextRun();
r2.setText("Numbered List Item - 1");

Dans le cas où nous travaillons avec plusieurs listes, il est toujours important de définir lesindentLevel pour obtenir une indentation correcte des éléments.

4.5. les tables

Les tableaux sont un autre objet clé dans une présentation et sont utiles lorsque nous voulons afficher des données.

Commençons par créer un tableau:

XSLFTable tbl = slide.createTable();
tbl.setAnchor(new Rectangle(50, 50, 450, 300));

Maintenant, nous pouvons ajouter un en-tête:

int numColumns = 3;
XSLFTableRow headerRow = tbl.addRow();
headerRow.setHeight(50);

for (int i = 0; i < numColumns; i++) {
    XSLFTableCell th = headerRow.addCell();
    XSLFTextParagraph p = th.addNewTextParagraph();
    p.setTextAlign(TextParagraph.TextAlign.CENTER);
    XSLFTextRun r = p.addNewTextRun();
    r.setText("Header " + (i + 1));
    tbl.setColumnWidth(i, 150);
}

Une fois l'en-tête terminé, nous pouvons ajouter des lignes et des cellules à notre tableau pour afficher les données:

for (int rownum = 1; rownum < numRows; rownum++) {
    XSLFTableRow tr = tbl.addRow();
    tr.setHeight(50);

    for (int i = 0; i < numColumns; i++) {
        XSLFTableCell cell = tr.addCell();
        XSLFTextParagraph p = cell.addNewTextParagraph();
        XSLFTextRun r = p.addNewTextRun();
        r.setText("Cell " + (i*rownum + 1));
    }
}

Lorsque vous travaillez avec des tableaux, il est important de rappeler qu’il est possible de personnaliser la bordure et l’arrière-plan de chaque cellule.

5. Modifier une présentation

Pas toujours lorsque vous travaillez sur un diaporama, nous devons en créer un nouveau, mais nous devons en modifier un déjà existant.

Jetons un coup d'œil à celui que nous avons créé dans la section précédente, puis nous pouvons commencer à le modifier:

image

5.1. Lire une présentation

La lecture d'une présentation est assez simple et peut être effectuée en utilisant le constructeur surchargé deXMLSlideShow qui accepte unFileInputStream:

XMLSlideShow ppt = new XMLSlideShow(
  new FileInputStream("slideshow.pptx"));

5.2. Modification de l'ordre des diapositives

Lorsque vous ajoutez des diapositives à notre présentation, il est judicieux de les mettre dans le bon ordre pour avoir un flux de diapositives approprié.

Lorsque cela ne se produit pas, il est possible de réorganiser l’ordre des diapositives. Voyons comment nous pouvons faire de la quatrième diapositive la deuxième:

List slides = ppt.getSlides();

XSLFSlide slide = slides.get(3);
ppt.setSlideOrder(slide, 1);

5.3. Supprimer une diapositive

Il est également possible de supprimer une diapositive d’une présentation.

Voyons comment nous pouvons supprimer la quatrième diapositive:

ppt.removeSlide(3);

6. Conclusion

Ce didacticiel rapide a illustré comment utiliser l'APIApache POI pour lire et écrire un fichier PowerPoint dans une perspective Java.

Le code source complet de cet article se trouve, comme toujours,over on GitHub.