Oprettelse af en MS PowerPoint-præsentation i Java

1. Introduktion

I denne artikel vil vi se, hvordan vi kan oprette en præsentation ved hjælp af Apache POI.

Dette bibliotek giver os mulighed for at oprette PowerPoint-præsentationer, læse eksisterende og ændre deres indhold.

2. Maven-afhængigheder

For at begynde med skal vi tilføje følgende afhængigheder i vores pom.xml:

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

Den seneste version af begge biblioteker kan downloades fra Maven Central.

3. Apache IP

Det Apache POI-bibliotek understøtter begge dele .ppt og .pptx filer, og det giver HSLF-implementering til Powerpoint '97 (-2007) -filformatet og XSLF til PowerPoint 2007 OOXML-filformat.

Da der ikke findes en fælles grænseflade til begge implementeringer, vi er nødt til at huske at bruge XMLSlideShow, XSLFSlide og XSLFTextShape klasser, når du arbejder med det nyere .pptx filformat.

Og når det kræves at arbejde med de ældre .ppt format, skal du bruge HSLFSlideShow, HSLFSlide og HSLFTextParagraph klasser.

Vi bruger det nye .pptx filformat i vores eksempler, og den første ting, vi skal gøre, er at oprette en ny præsentation, tilføje et dias til det (måske ved hjælp af et foruddefineret layout) og gemme det.

Når disse operationer er klare, kan vi derefter begynde at arbejde med billeder, tekst og tabeller.

3.1. Opret en ny præsentation

Lad os først oprette den nye præsentation:

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

3.2. Tilføj et nyt dias

Når vi tilføjer et nyt dias til en præsentation, kan vi også vælge at oprette det fra et foruddefineret layout. For at opnå dette skal vi først hente XSLFSlideMaster der indeholder layouts (den første er standardmasteren):

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

Nu kan vi hente XSLFSlideLayout og brug det, når du opretter det nye dias:

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

Lad os se, hvordan man udfylder pladsholdere inde i en skabelon:

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

Husk, at hver skabelon har sine pladsholdere, forekomster af XSLFAutoShape underklasse, som kan variere i antal fra en skabelon til en anden.

Lad os se, hvordan vi hurtigt kan hente alle pladsholdere fra et dias:

for (XSLFShape form: slide.getShapes ()) {if (form instans af XSLFAutoShape) {// dette er en skabelon pladsholder}}

3.3. Gemme en præsentation

Når vi har oprettet lysbilledshowet, er det næste trin at gemme det:

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

4. Arbejde med objekter

Nu hvor vi så, hvordan vi opretter en ny præsentation, tilføjer et dias til det (ved hjælp af en foruddefineret skabelon eller ikke) og gemmer det, kan vi begynde at tilføje tekst, billeder, links og tabeller.

Lad os starte med teksten.

4.1. Tekst

Når vi arbejder med tekst inde i en præsentation, som i MS PowerPoint, skal vi oprette tekstfeltet inde i et dias, tilføje et afsnit og derefter tilføje teksten til afsnittet:

XSLFTextBox form = slide.createTextBox (); XSLFTextParagraph p = form.addNewTextParagraph (); XSLFTextRun r = p.addNewTextRun (); r.setText ("Baeldung"); r.setFontColor (Farvegrøn); r.setFontSize (24.);

Når du konfigurerer XSLFTextRun, er det muligt at tilpasse sin stil ved at vælge skrifttypefamilien, og hvis teksten skal være i fed, kursiv eller understreget.

4.2. Hyperlinks

Når du føjer tekst til en præsentation, kan det nogle gange være nyttigt at tilføje hyperlinks.

Når vi først har oprettet XSLFTextRun objekt, kan vi nu tilføje et link:

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

4.3. Billeder

Vi kan også tilføje billeder:

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

Imidlertid, uden en ordentlig konfiguration placeres billedet i dias øverste venstre hjørne. For at placere det korrekt skal vi konfigurere dets forankringspunkt:

picture.setAnchor (nyt rektangel (320, 230, 100, 92));

Det XSLFPictureShape accepterer en Rektangel som et forankringspunkt, der giver os mulighed for at konfigurere x / y-koordinaterne med de to første parametre og bredden / højden af ​​billedet med de sidste to.

4.4. Lister

Tekst inde i en præsentation er ofte repræsenteret i form af en liste, nummereret eller ej.

Lad os nu definere en liste over punkter:

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

På samme måde kan vi definere en nummereret liste:

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

Hvis vi arbejder med flere lister, er det altid vigtigt at definere indrykningsniveau for at opnå en ordentlig indrykning af genstande.

4.5. Tabeller

Tabeller er et andet nøgleobjekt i en præsentation og er nyttige, når vi vil vise data.

Lad os starte med at oprette en tabel:

XSLFTable tbl = slide.createTable (); tbl.setAnchor (nyt rektangel (50, 50, 450, 300));

Nu kan vi tilføje et overskrift:

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

Når overskriften er afsluttet, kan vi tilføje rækker og celler til vores tabel for at vise 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)); }}

Når du arbejder med tabeller, er det vigtigt at minde om, at det er muligt at tilpasse grænsen og baggrunden for hver enkelt celle.

5. Ændring af en præsentation

Ikke altid, når vi arbejder på et lysbilledshow, skal vi oprette en ny, men vi skal ændre en allerede eksisterende.

Lad os se på den, vi oprettede i det forrige afsnit, og så kan vi begynde at ændre den:

5.1. Læsning af en præsentation

At læse en præsentation er ret enkel og kan gøres ved hjælp af XMLSlideShow overbelastet konstruktør, der accepterer en FileInputStream:

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

5.2. Ændring af diasrækkefølgen

Når du føjer dias til vores præsentation, er det en god ide at placere dem i den rigtige rækkefølge for at få en ordentlig strøm af dias.

Når dette ikke sker, er det muligt at omarrangere rækkefølgen af ​​diasene. Lad os se, hvordan vi kan flytte det fjerde dias til at være det andet:

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

5.3. Sletning af et dias

Det er også muligt at slette et dias fra en præsentation.

Lad os se, hvordan vi kan slette det 4. dias:

ppt.remSlide (3);

6. Konklusion

Denne hurtige vejledning har illustreret, hvordan man bruger Apache IP API til at læse og skrive PowerPoint-fil fra et Java-perspektiv.

Den komplette kildekode til denne artikel kan som altid findes på GitHub.