Apache POI PPT - PowerPoint zu Java

Es kommt häufig vor, dass eine Anwendung Berichte im Microsoft Office ppt- oder pptx-Format erstellen muss, genauso wie sie Power Point-Dateien bearbeiten und lesen muss. Ein Java-Programmierer, der MS Office-Dateien erstellen möchte, muss eine Java-Bibliothek verwenden, und dazu gehört die Apache-Bibliothek, die für ihre Effizienz bekannt ist.

Apache POI ist eine API, mit der Sie MS Office-Dateien erstellen, ändern und anzeigen können. Dieser Open-Source-Buchladen wird von der Apache Software Foundation entwickelt und vertrieben.

Dieses Tutorial richtet sich an diejenigen, die Power Point-Dateien mit Java lesen, erstellen und bearbeiten müssen. Es erklärt die wesentlichen Funktionen der Apache-POI-Bibliothek und ihre grundlegenden Funktionen, um Operationen an Power Point-Dateien ausführen zu können.

Laden Sie Apache POI PPT

Laden Sie die neueste Version von Apache POI von der offiziellen Website herunter (Download Apache POI PPT) und entpacken Sie den Inhalt in Ihren Projektordner, damit Sie dann die erforderlichen Bibliotheken mit der Anwendung verknüpfen können. Wir benötigen die folgenden .jar Dateien:
  • poi.jar
  • poi-oxml.jar
  • poi-oxml-schema.jar
  • log4j.jar
  • xmlbeans.jar

Klassen und Methoden

Apache POI enthält Klassen und Methoden für die Arbeit mit Excel-, Word- und Powerpoint-Dateien. Diese Klassen für Excel und Word haben wir bereits in früheren Artikeln erläutert. Wir zeigen Ihnen die Klassen im Zusammenhang mit Power Point:
  • XMLSlideShow: Zum Erstellen und Verwalten einer Präsentation haben Sie diese XMLSlideShow-Klasse in org.apache.poi.xslf.usermoder.
  • XSLFSlide: Erstellt und verwaltet eine Folie in einer Präsentation.
  • XSLFSlideMaster: Für eine Präsentation, die verschiedene Folienlayouts enthält. Die XSLFSlideMaster-Klasse ermöglicht den Zugriff auf diese Layouts.
  • XSLFSlideLayout: ermöglicht die Verwaltung der Layouts einer Folie.
  • XSLFTextParagraph: Sie können Text in die Folie schreiben, indem Sie die Klasse XSLFTextParagraph.
  • XSLFTextRun verwenden: Diese Klasse übernimmt die Formatierung des Textes (Hyperlinks, Farben, Schriftarten usw.).
  • XSLFTextShape: Diese Klasse behandelt Formen, die Text enthalten.
  • XSLFHyperlink: Ermöglicht das Erstellen von Hyperlinks in einer Präsentation.

Erstellen Sie eine leere Power Point-Präsentation

Sehen wir uns nun an, wie Sie eine Präsentation mit Java erstellen. Um eine leere Präsentation zu erstellen, müssen Sie XMLSlideShow class:

XMLSlideShow ppt = new XMLSlideShow(); 
Speichern Sie die Änderungen an einem PPT-Dokument mit dem FileOutputStream:

File file=new File("C://POIPPT//Examples//example1.pptx"); 
FileOutputStream out = new FileOutputStream(file);
ppt.write(out);
Der folgende Code ist das vollständige Programm zum Erstellen eines leeren PowerPoint-Dokuments:

import java.io.File; 
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;

public class PowerPoint {

public static void main(String args[]) throws IOException{

//create a new empty Slide Show
XMLSlideShow ppt = new XMLSlideShow();

//Erstellen eines FileOutputStream-Objekts zum Speichern des PPT File file =new File("exemple.pptx");
FileOutputStream fis = new FileOutputStream(file);

//Datei speichern
ppt.write(fis);
System.out.println("Datei erfolgreich erstellt");
fis.close();
}
}
Durch das Kompilieren und Ausführen dieses Codes wird eine leere exemple.pptx-Datei in unserem Projektverzeichnis erstellt, die wie folgt aussieht:

Ändern oder Bearbeiten einer vorhandenen PowerPoint-Datei

Um eine vorhandene Präsentation zu öffnen, instanziieren Sie die XMLSlideShow-Klasse und übergeben Sie das FileInputStream-Objekt der Datei, die Sie ändern möchten, als Argument im XMLSlideShow.
File file=new File("C://POIPPT//Examples//example1.pptx"); 
FileInputstream inputstream =new FileInputStream(Datei);
XMLSlideShow ppt = new XMLSlideShow(inputstream);
Sie können Folien zu einer Präsentation hinzufügen, indem Sie die createSlide()-Methode der XMLSlideShow.

XSLFSlide slide1= ppt.createSlide(); 
Das folgende Programm öffnet sich und fügt der bereits erstellten Datei Folien hinzu exemple.pptx:

import java.io.File; 
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;

public class EditPresentation {

public static void main(String ar[]) throws IOException{

//open existing powerpoint file
File file = new File("exemple.pptx");
FileInputStream inputstream=new FileInputStream(Datei);
XMLSlideShow ppt = new XMLSlideShow(inputstream);

//Folien zur Präsentation hinzufügen
XSLFSlide slide1 = ppt.createSlide();
XSLFSlide slide2 = ppt.createSlide();
XSLFSlide slide3 = ppt.createSlide();

//save changes
FileOutputStream fis = new FileOutputStream(file);
ppt.write(fis);

System.out.println("Änderungen wurden erfolgreich vorgenommen");
fis.close();
}
}
Das Programm erzeugt folgendes Ergebnis:

Änderungen wurden erfolgreich vorgenommen
Das Dokument wurde mit drei neuen Folien geändert:


Nachdem Sie neue Folien hinzugefügt haben, können Sie diese Folien lesen, schreiben und Operationen ausführen.

Verfügbare Layouts

PowerPoint-Präsentationen verfügen über Layouts für jede Folie, aus denen Sie auswählen können. Lassen Sie uns zunächst eine Liste aller verfügbaren Layouts finden.
Es gibt verschiedene Folien, die als Masterfolien bezeichnet werden, und in jedem Folienmaster gibt es mehrere Folienlayouts.
- Sie können die Liste der Folien mit der Methode abrufen  getSlideMasters()  der Klasse  XMLSlideShow.
- Sie können die Liste der Folienlayouts von jedem Folienmaster abrufen, indem Sie den Befehl getSlideLayouts()  der Klasse  XSLFSlideMaster.
- Sie können den Namen eines Layouts aus dem Objekt  layout  mit dem Befehl getType()  der Klasse  XSLFSlideLayout.

Das folgende Programm zeigt alle verfügbaren Layouts in einer PPT an:

import java.io.IOException; 
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlideLayout;
import org.apache.poi.xslf.usermodel.XSLFSlideMaster;

public class SlideLayouts {

public static void main(String args[]) throws IOException{

XMLSlideShow ppt = new XMLSlideShow();
System.out.println("Verfügbare Layouts");

//Abrufen einer Liste aller Folienmaster
for(XSLFSlideMaster master: ppt.getSlideMasters()){

//Abrufen einer Liste aller Folienlayouts in jedem Folienmaster
for(XSLFSlideLayout layout : master.getSlideLayouts()){

//Abrufen des Namens layout
System.out.println(layout.getType());
}
}
}
}
Output:

Verfügbare Layouts
BLANK
TITLE_ONLY
SECTION_HEADER
PIC_TX
TITLE_AND_CONTENT
TITLE
VERT_TX< br />VERT_TITLE_AND_TX
TWO_TX_TWO_OBJ
TWO_OBJ
OBJ_TX
Die folgende Abbildung zeigt einige Layouts, die in MS Office 2007 verfügbar sind:


Erstellen Sie eine Folie, die Title layout

Erstellen Sie eine Folie, die das Layout Title:

1- Erstellen Sie eine leere Präsentation, indem Sie die class  XMLSlideShow:

XMLSlideShow ppt=new XMLSlideShow(); 
2- Rufen Sie die Liste der Folienmaster mit der Methode ab  getSlideMasters(). Wählen Sie dann den gewünschten Folienmaster mit seinem Index aus:

XSLFSlideMaster slideMaster = ppt.getSlideMasters().get(0); 
Hier erhalten wir den Standard-Folienmaster, der sich an Position 0 des Arrays befindet.

3- Wählen Sie das Layout mit der Methode  getLayout()  der XSLFSlideMaster-Klasse. Diese Methode akzeptiert einen Parameter, bei dem es sich um eine statische Variable handelt, die das gewünschte Layout darstellt. Es gibt mehrere Variablen in dieser Klasse, und jede stellt ein Folienlayout dar.

Der folgende Code zeigt, wie ein Titellayout erstellt wird:

XSLFSlideLayout titleLayout = slideMaster.getLayout(SlideLayout.TITLE); 
4- Erstellen Sie eine neue Folie, indem Sie das Folienlayoutobjekt als Parameter übergeben.

XSLFSlide slide = ppt.createSlide(titleLayout); 

5- Wählen Sie einen Platzhalter mit der Methode getPlaceholder() der Klasse XSLFSlide aus. Diese Methode akzeptiert einen ganzzahligen Parameter. Wenn Sie den Wert 0 übergeben, erhalten Sie das XSLFTextSlide-Objekt, das für den Zugriff auf den Titeltextbereich in der Folie verwendet wird. Ändern Sie den Titel mit setText():

XSLFTextShape title = slide.getPlaceholder(0); 
title.setText("JavaCoder");

Hier ist das vollständige Programm:

import java.io.File; 
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.xslf.usermodel.SlideLayout;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;
import org.apache.poi.xslf.usermodel.XSLFSlideLayout;
import org.apache.poi.xslf.usermodel.XSLFSlideMaster;
import org.apache.poi.xslf.usermodel.XSLFTextShape;

public class TitleLayout {

public static void main(String args[]) throws IOException{

XMLSlideShow ppt = new XMLSlideShow();

//retrieve slidemaster
XSLFSlideMaster slideMaster = ppt.getSlideMasters().get(0);

//Holen Sie sich das gewünschte Folienlayout
XSLFSlideLayout titleLayout = slideMaster.getLayout(SlideLayout.TITLE);

//Erstellen einer Folie mit dem ausgewählten slideLayout
XSLFSlide slide = ppt.createSlide(titleLayout);

//Platzhalter 0 ändern, der der Titel ist
XSLFTextShape title = slide.getPlaceholder(0);

//edit title
title.setText("JavaCoder");

//Erstellen der neuen pptx Datei Datei=neue Datei("Exemple.pptx");
FileOutputStream fos = new FileOutputStream(file);

//Änderungen speichern
ppt.write(fos);
System.out.println("Folie erfolgreich erstellt");
fos.close();
}
}
Output:

slide created successfully

Ändern Sie den Titel und den Inhalt von layout

Erstellen Sie eine Folie mit dem Titel und dem Layout, indem Sie die folgenden Schritte ausführen:

1- Erstellen Sie eine leere Präsentation, indem Sie die Klasse instanziieren  XMLSlideShow.
2- Rufen Sie die Liste aller Slidemaster mit der Methode   getSlideMasters()
3- Holen Sie sich das gewünschte Layout mit der Methode  getLayout()  der Klasse  XSLFSlideMaster:
4- Erstellen Sie eine neue Folie, indem Sie das Layoutobjekt als Parameter übergeben:

XSLFSlide slide = ppt.createSlide(SlideLayout.TITLE_AND_CONTENT); 
5- Wählen Sie einen Platzhalter mit dem getPlaceholder():

XSLFTextShape title = slide.getPlaceholder(1); 
title1.setText("Einführung");
6 - Löschen des Folientextes durch Aufrufen der clearText()-Methode der XSLFTextShape-Klasse.

body.clearText(); 
7- Fügen Sie einen neuen Absatz mit der Methode addNewTextParagraph() hinzu. Jetzt können Sie Text mit der Methode addNewTextRun() hinzufügen, dann setText().

body.addNewTextParagraph().addNewTextRun().setText("this is my first slide body"); 
Hier ist der vollständige Code:

import java.io.File; 
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.xslf.usermodel.SlideLayout;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;
import org.apache.poi.xslf.usermodel.XSLFSlideLayout;
import org.apache.poi.xslf.usermodel.XSLFSlideMaster;
import org.apache.poi.xslf.usermodel.XSLFTextShape;

public class TitleAndBodyLayout {

public static void main(String args[]) throws IOException{

XMLSlideShow ppt = new XMLSlideShow();

//retrieve slidemaster
XSLFSlideMaster slideMaster = ppt.getSlideMasters().get(0);

//Holen Sie sich das gewünschte Folienlayout
XSLFSlideLayout titleLayout = slideMaster.getLayout(SlideLayout.TITLE);

//Erstellen einer Folie mit dem ausgewählten slideLayout
XSLFSlide slide = ppt.createSlide(titleLayout);

//Platzhalter 0 ändern, der der Titel ist
XSLFTextShape title = slide.getPlaceholder(0);

//edit title
title.setText("Einführung");

//Platzhalter 1 auswählen, der der Text ist
XSLFTextShape body = slide.getPlaceholder(1);

//alten Inhalt löschen
body.clearText();

//Absatz hinzufügen
body.addNewTextParagraph().addNewTextRun().setText("Meine erste Folie");

//Erstellen der neuen pptx Datei Datei=neue Datei("Exemple.pptx");
FileOutputStream fos = new FileOutputStream(file);

//Änderungen speichern
ppt.write(fos);
System.out.println("Folie erfolgreich erstellt");
fos.close();
}
}
Output:

slide created successfully

Abrufen und Ändern der Foliengröße

Die Größe einer Folie wird mit der Methode getPageSize() der XMLSlideShow.

java.awt.Dimension pgsize = ppt.getPageSize(); 
Um die Foliengröße in Java zu ändern, verwenden Sie die setPageSize()-Methode von XMLSlideShow.

ppt.setPageSize(new java.awt.Dimension(1024, 768)); 
Hier ist das vollständige Programm:

import java.awt.Dimension; 
import java.io.Datei;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.xslf.usermodel.XMLSlideShow;

public class ChangingSlide {

public static void main(String args[]) throws IOException{

File file = new File("Exemple.pptx");
XMLSlideShow ppt = new XMLSlideShow();

//aktuelle Dimension abrufen
Dimension pptsize = ppt.getPageSize();

System.out.println("Die aktuelle Foliendimension:");
System.out.println("width:" + pptsize.width);
System.out.println("height:" + pptsize.height);

//change dimension
ppt.setPageSize(new java.awt.Dimension(1024,400));

FileOutputStream out = new FileOutputStream(file);
ppt.write(out);
System.out.println("Die Foliendimension wurde geändert");
out.close();
}
}
Ausgabe:

Die aktuelle Foliengröße:
width:720
height:540
Die Foliendimension wurde geändert
Die Folie sieht nach dem Ändern der Größe wie folgt aus:

Folienreihenfolge ändern

Sie können die Reihenfolge mit der Methode setSlideOrder() ändern. Rufen Sie alle Folien mit der Methode getSlides() ab, wählen Sie dann aus der Folientabelle aus und ändern Sie die Reihenfolge mit der Methode setSlideOrder():

/Wählen Sie die dritte Folie aus
XSLFSlide slide = slides.get(2);

/setzen Sie es an die erste Stelle
ppt.setSlideOrder(slide, 1);
Der folgende Code zeigt ein Beispiel:

import java.io.File; 
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;

public class ReorderSlide {

public static void main(String args[]) throws IOException{

File file=new File("exemple.pptx");
XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(file));

//Folienliste abrufen
java.util.List slides = ppt.getSlides();

//Wählen Sie die 3. Folie
XSLFSlide selectesdslide = slides.get(2);

//setzen Sie es an die erste Position
ppt.setSlideOrder(selectesdslide, 0);

FileOutputStream fos = new FileOutputStream(file);
ppt.write(fos);
fos.close();
}
}
Die Anzeige vor und nach dem Tausch zwischen Folie 1 und 3:

Front
After

Folien löschen

Sie können Folien löschen, indem Sie die Methode removeSlide() aufrufen. Diese Methode akzeptiert eine Ganzzahl, die die Position der zu löschenden Folie darstellt.

 
File file=new File("fichier1.pptx");
XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(file));

/Folie an Position 0 löschen
ppt.removeSlide(0);
.
.
.
Wenn wir diesen Löschvorgang auf das obige Beispiel anwenden, das drei Folien (1, 2 und 3) enthält, erhalten wir diese Ausgabe:

Add Image

Sie können Bilder zu einer Präsentation hinzufügen, indem Sie die createPicture()-Methode der XSLFSlide-Klasse verwenden. Die Methode createPicture() akzeptiert ein Bild im Format eines Arrays von Bytes oder Bytes.

Sie müssen die Datei des Bildes, das hinzugefügt werden soll, lesen und mit der Methode IOUtils.toByteArray() in ein Array von Bytes konvertieren.

//read image
File image=new File("C://logo.jpg");

//Bild in ein Byte-Array umwandeln
byte[] bimage = IOUtils.toByteArray(new FileInputStream(image));
Jetzt müssen wir das erstellte Bild mit der Methode addPicture() zur Präsentation hinzufügen. Diese Methode akzeptiert die Byte-Variable, die aus der Konvertierung des Bildes erhalten wurde.

PictureData picdata = ppt.addPicture(picture, PictureData.PictureType.PNG); 
Integrieren Sie schließlich das Bild mit dem createPicture():

XSLFPictureShape pic = slide.createPicture(picdata); 
Das folgende Programm implementiert diese Schritte zum Hinzufügen eines Bildes:

import java.io.File; 
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.sl.usermodel.PictureData;
import org.apache.poi.util.IOUtils;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFPictureData;
import org.apache.poi.xslf.usermodel.XSLFPictureShape;
import org.apache.poi.xslf.usermodel.XSLFSlide;

public class AddImage {

public static void main(String args[]) throws IOException{

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

//ein Bild lesen
Datei image=new Datei("logo.png");

//Bild in Bytes umwandeln
byte[] Bild = IOUtils.toByteArray(new FileInputStream(Bild));

//Bild zu Präsentation hinzufügen
Bilddaten picdata = ppt.addPicture(Bild, PictureData.PictureType.PNG);

//Erstellen einer Folie für dieses hinzugefügte Bild
XSLFPictureShape pic = slide.createPicture(picdata);

Datei file=new File("diapoimage.pptx");
FileOutputStream fos = new FileOutputStream(file);

ppt.write(fos);
System.out.println("Bild hinzugefügt!");
fos.close();
}
}
Die Datei erscheint nach ihrer Erstellung so:

Formatierung von Text

Text in einer Präsentation kann mit den Methoden der XSLFTextRun-Klasse formatiert werden. Dazu müssen Sie ein XSLFTextRun-Objekt erstellen, wie unten gezeigt:

//Erstellen einer Folie mit Titel und Inhalt
XSLFSlide slide = ppt.createSlide(slidelayout);

/Platzhalter auswählen 1
XSLFTextShape body = slide.getPlaceholder(1);

/Hinzufügen eines Absatzes
XSLFTextParagraph paragraph=body.addNewTextParagraph();

//Erstellen eines TextRun-Objekts
XSLFTextRun run = paragraph.addNewTextRun();
Sie können die Schriftgröße des Textes in der Präsentation ändern, indem Sie setFontSize():

run.setFontColor(java.awt.Color.blue); 
run.setFontSize(26);
Der folgende Code zeigt, wie die verschiedenen Stile angewendet werden: fett, kursiv, unterstrichen auf einen Text in einer PowerPoint-Präsentation.

//ändern Sie den Text in Bold
run.setBold(true);

//Text in Kursiv ändern
run.setItalic(true)

/Zeichnet eine Linie in der Mitte des Textes
run.setStrikethrough(true);

//unterstrichen text
run.setUnderline(true);
Um Abstand zwischen den Absätzen zu haben, fügen Sie addLineBreak() aus dem XSLFTextParagraph:

paragraph.addLineBreak(); 
Das folgende Programm sammelt alle genannten Methoden:

import java.io.File; 
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.xslf.usermodel.SlideLayout;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;
import org.apache.poi.xslf.usermodel.XSLFSlideLayout;
import org.apache.poi.xslf.usermodel.XSLFSlideMaster;
import org.apache.poi.xslf.usermodel.XSLFTextParagraph;
import org.apache.poi.xslf.usermodel.XSLFTextRun;
import org.apache.poi.xslf.usermodel.XSLFTextShape;

public class TextFormatting {

public static void main(String args[]) throws IOException{

//create empty presentation
XMLSlideShow ppt = new XMLSlideShow();

//slidemaster
XSLFSlideMaster slideMaster = ppt.getSlideMasters()[0];

//Wählen Sie das Layout aus der bereitgestellten Liste aus
XSLFSlideLayout slidelayout = slideMaster.getLayout(SlideLayout.TITLE_AND_CONTENT);

//Erstellen einer Folie mit Titel und Inhalt
XSLFSlide slide = ppt.createSlide(slidelayout);

//select title
XSLFTextShape body = slide.getPlaceholder(1);

//Entfernen von vorhandenem Text in slide
body.clearText();

//neuen Absatz hinzufügen
XSLFTextParagraph paragraph=body.addNewTextParagraph();

//Zeile 1

XSLFTextRun run1 = paragraph.addNewTextRun();
run1.setText("Farbige Linie");

//Textfarbe ändern
run1.setFontColor(java.awt.Color.red);

//Schriftgröße ändern
run1.setFontSize(24);

//zur nächsten Zeile springen
Absatz.addLineBreak();

//Zeile 2

XSLFTextRun run2 = paragraph.addNewTextRun();
run2.setText("FETTE Zeile");
run2.setFontColor(java.awt.Color.CYAN);

//Text fett rendern
run2.setBold(true);
Absatz.addLineBreak();

//Zeile 3

XSLFTextRun run3 = paragraph.addNewTextRun();
run3.setText("Durchgestrichene Zeile");
run3.setFontSize(12);

//render text kursiv
run3.setItalic(true);

//strikethrough
run3.setStrikethrough(true);
Absatz.addLineBreak();

//Zeile 4

XSLFTextRun run4 = paragraph.addNewTextRun();
run4.setText("Unterstrichene Zeile");
run4.setUnderline(true);

//Text unterstreichen
Absatz.addLineBreak();

//Erstellen eines Dateiobjekts
Datei datei=new Datei("TextFormat.pptx");
FileOutputStream out = new FileOutputStream(file);

//Änderungen speichern
ppt.write(out);
out.close();
}
}
Ausführung: