Erstellen einer MS PowerPoint-Präsentation in Java

1. Einleitung

In diesem Artikel erfahren Sie, wie Sie mit Apache POI eine Präsentation erstellen können.

Diese Bibliothek bietet uns die Möglichkeit, PowerPoint-Präsentationen zu erstellen, vorhandene zu lesen und deren Inhalt zu ändern.

2. Maven-Abhängigkeiten

Zu Beginn müssen wir die folgenden Abhängigkeiten in unsere pom.xml einfügen :

 org.apache.poi poi 3.17   org.apache.poi poi-ooxml 3.17 

Die neueste Version beider Bibliotheken kann von Maven Central heruntergeladen werden.

3. Apache POI

Die Apache POI-Bibliothek unterstützt sowohl PPT- als auch PPTX- Dateien und bietet die HSLF-Implementierung für das Powerpoint '97 (-2007) -Dateiformat und die XSLF-Datei für das PowerPoint 2007 OOXML-Dateiformat.

Da eine gemeinsame Schnittstelle für beide Implementierungen nicht vorhanden ist , müssen wir uns erinnern , die verwenden XMLSlideShow , XSLFSlide und XSLFTextShape Klassen , wenn sie mit den neueren Arbeiten .pptx - Dateiformat .

Wenn Sie mit dem älteren PPT- Format arbeiten möchten , verwenden Sie die Klassen HSLFSlideShow , HSLFSlide und HSLFTextParagraph .

In unseren Beispielen verwenden wir das neue PPTX- Dateiformat. Als Erstes müssen wir eine neue Präsentation erstellen, eine Folie hinzufügen (möglicherweise mit einem vordefinierten Layout) und diese speichern.

Sobald diese Vorgänge abgeschlossen sind, können wir mit der Arbeit mit Bildern, Text und Tabellen beginnen.

3.1. Erstellen Sie eine neue Präsentation

Lassen Sie uns zuerst die neue Präsentation erstellen:

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

3.2. Fügen Sie eine neue Folie hinzu

Wenn Sie einer Präsentation eine neue Folie hinzufügen, können Sie diese auch aus einem vordefinierten Layout erstellen. Um dies zu erreichen, müssen wir zuerst den XSLFSlideMaster abrufen , der Layouts enthält (der erste ist der Standardmaster):

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

Jetzt können wir das XSLFSlideLayout abrufen und beim Erstellen der neuen Folie verwenden:

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

Mal sehen, wie Platzhalter in einer Vorlage gefüllt werden:

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

Denken Sie daran, dass jede Vorlage Platzhalter hat, Instanzen der XSLFAutoShape- Unterklasse, deren Anzahl von Vorlage zu Vorlage unterschiedlich sein kann.

Mal sehen, wie wir schnell alle Platzhalter von einer Folie abrufen können:

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

3.3. Speichern einer Präsentation

Nachdem wir die Diashow erstellt haben, müssen Sie sie im nächsten Schritt speichern:

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

4. Arbeiten mit Objekten

Nachdem wir nun gesehen haben, wie Sie eine neue Präsentation erstellen, eine Folie hinzufügen (mithilfe oder ohne vordefinierte Vorlage) und diese speichern, können Sie Text, Bilder, Links und Tabellen hinzufügen.

Beginnen wir mit dem Text.

4.1. Text

Wenn Sie wie in MS PowerPoint mit Text in einer Präsentation arbeiten, müssen Sie das Textfeld in einer Folie erstellen, einen Absatz hinzufügen und dann den Text zum Absatz hinzufügen:

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

Bei der Konfiguration von XSLFTextRun können Sie den Stil anpassen, indem Sie die Schriftfamilie auswählen und den Text fett, kursiv oder unterstrichen anzeigen .

4.2. Hyperlinks

Wenn Sie einer Präsentation Text hinzufügen, kann es manchmal nützlich sein, Hyperlinks hinzuzufügen.

Nachdem wir das XSLFTextRun- Objekt erstellt haben, können wir jetzt einen Link hinzufügen:

XSLFHyperlink link = r.createHyperlink(); link.setAddress("//www.baeldung.com");

4.3. Bilder

Wir können auch Bilder hinzufügen:

byte[] pictureData = IOUtils.toByteArray( new FileInputStream("logo-leaf.png")); XSLFPictureData pd = ppt.addPicture(pictureData, PictureData.PictureType.PNG); XSLFPictureShape picture = slide.createPicture(pd);

Jedoch ohne eine richtige Konfiguration wird das Bild in der oberen linken Ecke der Folie platziert werden . Um es richtig zu platzieren, müssen wir seinen Ankerpunkt konfigurieren:

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

Die XSLFPictureShape akzeptiert ein Rechteck als Ankerpunkt, mit dem wir die x / y-Koordinaten mit den ersten beiden Parametern und die Breite / Höhe des Bildes mit den letzten beiden konfigurieren können.

4.4. Listen

Text innerhalb einer Präsentation wird häufig in Form einer Liste dargestellt, nummeriert oder nicht.

Definieren wir nun eine Liste von Aufzählungspunkten:

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

Ebenso können wir eine nummerierte Liste definieren:

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

Wenn wir mit mehreren Listen arbeiten, ist es immer wichtig, die indentLevel zu definieren , um eine ordnungsgemäße Einrückung der Elemente zu erreichen.

4.5. Tabellen

Tables are another key object in a presentation and are helpful when we want to display data.

Let's start by creating a table:

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

Now, we can add a header:

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

Once the header is completed, we can add rows and cells to our table to display data:

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

When working with tables, it's important to remind that it's possible to customize the border and the background of every single cell.

5. Altering a Presentation

Not always when working on a slideshow, we have to create a new one, but we have to alter an already existing one.

Let's give a look to the one that we created in the previous section and then we can start altering it:

5.1. Reading a Presentation

Reading a presentation is pretty simple and can be done using the XMLSlideShow overloaded constructor that accepts a FileInputStream:

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

5.2. Folienreihenfolge ändern

Wenn Sie unserer Präsentation Folien hinzufügen, sollten Sie sie in die richtige Reihenfolge bringen, damit die Folien ordnungsgemäß fließen.

Wenn dies nicht der Fall ist, können Sie die Reihenfolge der Folien ändern. Mal sehen, wie wir die vierte Folie zur zweiten verschieben können:

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

5.3. Folie löschen

Es ist auch möglich, eine Folie aus einer Präsentation zu löschen.

Mal sehen, wie wir die 4. Folie löschen können:

ppt.removeSlide(3);

6. Fazit

Dieses kurze Tutorial hat gezeigt, wie die Apache POI- API zum Lesen und Schreiben von PowerPoint-Dateien aus einer Java-Perspektive verwendet wird.

Der vollständige Quellcode für diesen Artikel ist wie immer auf GitHub zu finden.