Membuat Presentasi MS PowerPoint di Java

1. Perkenalan

Di artikel ini, kita akan melihat bagaimana kita bisa membuat presentasi menggunakan Apache POI.

Perpustakaan ini memberi kita kemungkinan untuk membuat presentasi PowerPoint, membaca yang sudah ada, dan mengubah isinya.

2. Ketergantungan Maven

Untuk memulai, kita perlu menambahkan dependensi berikut ke pom.xml kita :

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

Versi terbaru kedua perpustakaan dapat diunduh dari Maven Central.

3. Apache POI

The Apache POI perpustakaan mendukung kedua .ppt dan .pptx file , dan menyediakan implementasi HSLF untuk Powerpoint '97 (-2007) format file dan XSLF untuk PowerPoint 2007 format file OOXML.

Karena antarmuka umum tidak ada untuk kedua implementasi, kita harus ingat untuk menggunakan kelas XMLSlideShow , XSLFSlide dan XSLFTextShape saat bekerja dengan format file .pptx yang lebih baru .

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

Kami akan menggunakan format file .pptx baru dalam contoh kami, dan hal pertama yang harus kami lakukan adalah membuat presentasi baru, menambahkan slide ke dalamnya (mungkin menggunakan tata letak yang telah ditentukan) dan menyimpannya.

Setelah operasi ini jelas, kita dapat mulai bekerja dengan gambar, teks, dan tabel.

3.1. Buat Presentasi Baru

Pertama-tama mari buat presentasi baru:

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

3.2. Tambahkan Slide Baru

Saat menambahkan slide baru ke presentasi, kita juga dapat memilih untuk membuatnya dari tata letak yang telah ditentukan sebelumnya. Untuk mencapai ini, pertama-tama kita harus mengambil XSLFSlideMaster yang menyimpan tata letak (yang pertama adalah master default):

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

Sekarang, kita dapat mengambil XSLFSlideLayout dan menggunakannya saat membuat slide baru:

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

Mari kita lihat cara mengisi placeholder di dalam template:

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

Ingatlah bahwa setiap template memiliki placeholdernya sendiri, instance subkelas XSLFAutoShape , yang jumlahnya bisa berbeda dari satu template ke template lainnya.

Mari kita lihat bagaimana kita bisa dengan cepat mengambil semua placeholder dari slide:

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

3.3. Menyimpan Presentasi

Setelah kami membuat slideshow, langkah selanjutnya adalah menyimpannya:

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

4. Bekerja Dengan Objek

Sekarang setelah kita melihat cara membuat presentasi baru, menambahkan slide ke dalamnya (menggunakan atau tidak template yang telah ditentukan sebelumnya) dan menyimpannya, kita dapat mulai menambahkan teks, gambar, tautan, dan tabel.

Mari kita mulai dengan teks.

4.1. Teks

Saat bekerja dengan teks di dalam presentasi, seperti di MS PowerPoint, kita harus membuat kotak teks di dalam slide, menambahkan paragraf dan kemudian menambahkan teks ke paragraf:

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

Saat mengkonfigurasi XSLFTextRun , dimungkinkan untuk menyesuaikan gayanya dengan memilih jenis font dan jika teks harus dicetak tebal, miring atau bergaris bawah.

4.2. Hyperlink

Saat menambahkan teks ke presentasi, terkadang ada gunanya menambahkan hyperlink.

Setelah kita membuat objek XSLFTextRun , sekarang kita dapat menambahkan tautan:

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

4.3. Gambar-gambar

Kami juga dapat menambahkan gambar:

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

Namun, tanpa konfigurasi yang tepat, gambar akan ditempatkan di pojok kiri atas slide . Untuk menempatkannya dengan benar, kita harus mengkonfigurasi titik jangkarnya:

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

The XSLFPictureShape menerima Rectangle sebagai titik jangkar, yang memungkinkan kita untuk mengkonfigurasi koordinat x / y dengan dua parameter pertama, dan lebar / tinggi gambar dengan dua terakhir.

4.4. Daftar

Teks, di dalam presentasi, seringkali direpresentasikan dalam bentuk daftar, bernomor atau tidak.

Sekarang mari kita tentukan daftar poin-poin:

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

Demikian pula, kita dapat mendefinisikan daftar bernomor:

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

Jika kita bekerja dengan banyak daftar, itu selalu penting untuk menentukan indentLevel untuk mencapai indentasi item yang tepat.

4.5. Tabel

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. Mengubah Urutan Slide

Saat menambahkan slide ke presentasi kita, ada baiknya untuk meletakkannya dalam urutan yang benar agar memiliki aliran slide yang tepat.

Jika ini tidak terjadi, Anda dapat mengatur ulang urutan slide. Mari kita lihat bagaimana kita bisa memindahkan slide keempat menjadi yang kedua:

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

5.3. Menghapus Slide

Anda juga dapat menghapus slide dari presentasi.

Mari kita lihat bagaimana kita bisa menghapus slide ke-4:

ppt.removeSlide(3);

6. Kesimpulan

Tutorial singkat ini telah mengilustrasikan cara menggunakan Apache POI API untuk membaca dan menulis file PowerPoint dari perspektif Java.

Kode sumber lengkap untuk artikel ini dapat ditemukan, seperti biasa, di GitHub.