Erstellen einer MS PowerPoint-Präsentation in Java

Erstellen einer MS PowerPoint-Präsentation in Java

1. Einführung

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

Diese Bibliothek gibt 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 zu unserenpom.xmlhinzufügen:


    org.apache.poi
    poi
    3.17


    org.apache.poi
    poi-ooxml
    3.17

Die neueste Version von beidenlibrarieskann von Maven Central heruntergeladen werden.

3. Apache POI

Apache POI library supports both .ppt and .pptx files und bietet die HSLF-Implementierung für das Powerpoint '97 (-2007) -Dateiformat und die XSLF-Implementierung für das PowerPoint 2007 OOXML-Dateiformat.

Da für beide Implementierungen keine gemeinsame Schnittstelle vorhanden ist,we have to remember to use the XMLSlideShow, XSLFSlide and XSLFTextShape classes when working with the newer .pptx file format.

Wenn Sie mit dem älteren Format.pptarbeiten möchten, verwenden Sie die KlassenHSLFSlideShow,HSLFSlide undHSLFTextParagraph.

In unseren Beispielen verwenden wir das neue Dateiformat.pptx. 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 Sie mit Bildern, Text und Tabellen arbeiten.

3.1. Erstellen Sie eine neue Präsentation

Erstellen wir zunächst die neue Präsentation:

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 dieXSLFSlideMaster abrufen, die Layouts enthalten (der erste ist der Standardmaster):

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

Jetzt können wir dieXSLFSlideLayout 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 ihre Platzhalter hat, Instanzen der UnterklasseXSLFAutoShape, 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 gesehen haben, wie eine neue Präsentation erstellt, eine Folie hinzugefügt (mit oder ohne vordefinierte Vorlage) und gespeichert wird, können wir 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("example");
r.setFontColor(Color.green);
r.setFontSize(24.);

Bei der Konfiguration vonXSLFTextRun können Sie den Stil anpassen, indem Sie die Schriftfamilie auswählen und festlegen, ob der Text fett, kursiv oder unterstrichen sein soll.

Beim Hinzufügen von Text zu einer Präsentation kann es manchmal nützlich sein, Hyperlinks hinzuzufügen.

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

XSLFHyperlink link = r.createHyperlink();
link.setAddress("http://www.example.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);

without a proper configuration, the image will be placed in the top left corner of the slide. Um es richtig zu platzieren, müssen wir seinen Ankerpunkt konfigurieren:

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

DasXSLFPictureShape akzeptiert einRectangle als Ankerpunkt, wodurch 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, dieindentLevelzu definieren, um eine ordnungsgemäße Einrückung der Elemente zu erreichen.

4.5. Tabellen

Tabellen sind ein weiteres Schlüsselobjekt in einer Präsentation und hilfreich, wenn wir Daten anzeigen möchten.

Beginnen wir mit der Erstellung einer Tabelle:

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

Jetzt können wir einen Header hinzufügen:

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

Sobald der Header fertig ist, können wir unserer Tabelle Zeilen und Zellen hinzufügen, um Daten anzuzeigen:

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

Wenn Sie mit Tabellen arbeiten, müssen Sie daran erinnern, dass es möglich ist, den Rahmen und den Hintergrund jeder einzelnen Zelle anzupassen.

5. Präsentation ändern

Nicht immer, wenn wir an einer Diashow arbeiten, müssen wir eine neue erstellen, aber wir müssen eine bereits vorhandene ändern.

Werfen wir einen Blick auf den im vorherigen Abschnitt erstellten und können ihn dann ändern:

image

5.1. Präsentation lesen

Das Lesen einer Präsentation ist ziemlich einfach und kann mit dem überladenen KonstruktorXMLSlideShow durchgeführt werden, derFileInputStream akzeptiert:

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 in die zweite 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 API vonApache POIzum Lesen und Schreiben von PowerPoint-Dateien aus einer Java-Perspektive verwendet wird.

Der vollständige Quellcode für diesen Artikel ist wie immerover on GitHub.