Membuat Persembahan MS PowerPoint di Java

1. Pengenalan

Dalam artikel ini, kita akan melihat bagaimana kita dapat membuat persembahan menggunakan Apache POI.

Perpustakaan ini memberi kita kemungkinan untuk membuat persembahan PowerPoint, membaca yang ada, dan mengubah kandungannya.

2. Pergantungan Maven

Untuk memulakan, kita perlu menambahkan kebergantungan berikut ke dalam pom.xml kami :

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

Versi terbaru kedua-dua perpustakaan boleh dimuat turun dari Maven Central.

3. POI Apache

The perpustakaan Apache POI menyokong kedua-dua .ppt dan .pptx fail , dan ia menyediakan pelaksanaan HSLF bagi Powerpoint '97 (-2007) format fail dan XSLF untuk PowerPoint 2007 format fail OOXML.

Oleh kerana antara muka yang sama tidak ada untuk kedua-dua pelaksanaan, kita harus ingat untuk menggunakan kelas XMLSlideShow , XSLFSlide dan XSLFTextShape ketika bekerja dengan format fail .pptx yang lebih baru .

Dan, apabila diperlukan untuk bekerja dengan format .ppt yang lebih lama , gunakan kelas HSLFSlideShow , HSLFSlide dan HSLFTextParagraph .

Kami akan menggunakan format fail .pptx baru dalam contoh kami, dan perkara pertama yang harus kami lakukan ialah membuat persembahan baru, tambahkan slaid ke dalamnya (mungkin menggunakan susun atur yang telah ditetapkan) dan simpan.

Setelah operasi ini jelas, kita kemudian boleh mula bekerja dengan gambar, teks dan jadual.

3.1. Buat Pembentangan Baru

Mari buat persembahan baru terlebih dahulu:

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

3.2. Tambahkan Slaid Baru

Semasa menambahkan slaid baru ke persembahan, kita juga dapat memilih untuk membuatnya dari susun atur yang telah ditentukan. Untuk mencapainya, pertama-tama kita harus mengambil XSLFSlideMaster yang memegang susun atur (yang pertama adalah master lalai):

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

Sekarang, kita boleh mengambil XSLFSlideLayout dan menggunakannya semasa membuat slaid baru:

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

Mari lihat cara mengisi tempat letak di dalam templat:

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

Ingat bahawa setiap templat mempunyai tempat letaknya, contoh subkelas XSLFAutoShape , yang boleh berbeza dari satu templat ke templat yang lain.

Mari lihat bagaimana kita dapat mengambil semua tempat letak dengan cepat dari slaid:

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

3.3. Menyimpan Persembahan

Setelah kami membuat tayangan slaid, langkah seterusnya adalah menyimpannya:

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

4. Bekerja Dengan Objek

Setelah kita melihat bagaimana membuat persembahan baru, tambahkan slaid ke dalamnya (menggunakan atau tidak templat yang telah ditentukan) dan menyimpannya, kita boleh mula menambahkan teks, gambar, pautan, dan jadual.

Mari mulakan dengan teks.

4.1. Teks

Ketika bekerja dengan teks di dalam presentasi, seperti di MS PowerPoint, kita harus membuat kotak teks di dalam slaid, menambahkan perenggan dan kemudian menambahkan teks ke perenggan:

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

Semasa mengkonfigurasi XSLFTextRun , mungkin untuk menyesuaikan gaya dengan memilih keluarga fon dan jika teks harus dalam huruf tebal, miring atau bergaris bawah.

4.2. Pautan pautan

Semasa menambahkan teks ke persembahan, kadang-kadang berguna untuk menambah pautan.

Setelah kami membuat objek XSLFTextRun , kini kami dapat menambahkan pautan:

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

4.3. Gambar

Kami juga boleh menambah gambar:

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

Walau bagaimanapun, tanpa konfigurasi yang betul, gambar akan diletakkan di sudut kiri atas slaid . Untuk meletakkannya dengan betul, kita harus mengkonfigurasi titik jangkarnya:

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

The XSLFPictureShape menerima suatu Rectangle sebagai titik utama, yang membolehkan kita untuk menetapkan koordinat x / y dengan dua parameter pertama, dan lebar / ketinggian imej dengan dua lepas.

4.4. Senarai

Teks, di dalam persembahan, sering ditunjukkan dalam bentuk senarai, bernombor atau tidak.

Sekarang mari kita tentukan senarai titik peluru:

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

Begitu juga, kita dapat menentukan senarai bernombor:

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

Sekiranya kita bekerja dengan banyak senarai, selalu penting untuk menentukan tahap indent untuk mencapai lekukan item yang betul.

4.5. Jadual

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. Menukar Urutan Slaid

Semasa menambahkan slaid ke persembahan kami, adalah idea yang baik untuk meletakkannya dalam urutan yang betul agar aliran slaid yang betul.

Apabila ini tidak berlaku, adalah mungkin untuk menyusun semula susunan slaid. Mari lihat bagaimana kita dapat memindahkan slaid keempat menjadi yang kedua:

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

5.3. Memadamkan Slaid

Anda juga boleh memadam slaid dari persembahan.

Mari lihat bagaimana kita boleh memadam slaid ke-4:

ppt.removeSlide(3);

6. Kesimpulannya

Tutorial ringkas ini telah menggambarkan cara menggunakan Apache POI API untuk membaca dan menulis fail PowerPoint dari perspektif Java.

Kod sumber lengkap untuk artikel ini boleh didapati seperti biasa di GitHub.