Створення презентації MS PowerPoint на Java

1. Вступ

У цій статті ми побачимо, як ми можемо створити презентацію, використовуючи Apache POI.

Ця бібліотека дає нам можливість створювати презентації PowerPoint, читати існуючі та змінювати їх вміст.

2. Залежності Мейвена

Для початку нам потрібно додати наступні залежності до нашого pom.xml :

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

Останню версію обох бібліотек можна завантажити з Maven Central.

3. Apache POI

Бібліотека POI Apache підтримує як файли .ppt, так і .pptx , а також забезпечує реалізацію HSLF для формату файлу Powerpoint '97 (-2007) та XSLF для формату файлу OOXML PowerPoint 2007.

Оскільки загального інтерфейсу не існує для обох реалізацій, ми повинні пам’ятати про використання класів XMLSlideShow , XSLFSlide та XSLFTextShape під час роботи з новішим форматом файлу .pptx .

А коли потрібно працювати зі старим форматом .ppt , використовуйте класи HSLFSlideShow , HSLFSlide та HSLFTextParagraph .

Ми використаємо новий формат файлу .pptx у наших прикладах, і перше, що нам потрібно зробити, це створити нову презентацію, додати до неї слайд (можливо, використовуючи заздалегідь визначений макет) і зберегти його.

Після того, як ці операції будуть зрозумілі, ми можемо почати працювати з зображеннями, текстом і таблицями.

3.1. Створіть нову презентацію

Спершу створимо нову презентацію:

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

3.2. Додайте новий слайд

Додаючи новий слайд до презентації, ми також можемо створити його із заздалегідь визначеного макета. Щоб досягти цього, спочатку потрібно отримати XSLFSlideMaster, що містить макети (перший - головний за замовчуванням):

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

Тепер ми можемо отримати XSLFSlideLayout і використовувати його при створенні нового слайда:

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

Давайте подивимося, як заповнити заповнювачі всередині шаблону:

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

Пам’ятайте, що кожен шаблон має свої заповнювачі, екземпляри підкласу XSLFAutoShape , які можуть відрізнятися за кількістю від одного шаблону до іншого.

Давайте подивимося, як ми можемо швидко отримати всі заповнювачі зі слайда:

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

3.3. Збереження презентації

Після створення слайд-шоу наступним кроком є ​​його збереження:

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

4. Робота з об’єктами

Тепер, коли ми побачили, як створити нову презентацію, додати до неї слайд (використовуючи чи не заздалегідь визначений шаблон) та зберегти його, ми можемо почати додавати текст, зображення, посилання та таблиці.

Почнемо з тексту.

4.1. Текст

Під час роботи з текстом у презентації, як у MS PowerPoint, ми повинні створити текстове поле всередині слайда, додати абзац, а потім додати текст до абзацу:

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

При налаштуванні XSLFTextRun можна налаштувати його стиль, вибравши сімейство шрифтів, і якщо текст повинен бути напівжирним, курсивом або підкресленим.

4.2. Гіперпосилання

Додаючи текст до презентації, іноді може бути корисно додати гіперпосилання.

Після створення об’єкта XSLFTextRun тепер можна додати посилання:

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

4.3. Зображення

Ми також можемо додавати зображення:

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

Однак без належної конфігурації зображення буде розміщено у верхньому лівому куті слайда . Щоб правильно розмістити його, ми повинні налаштувати його опорну точку:

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

XSLFPictureShape приймає прямокутник в якості точки прив'язки, що дозволяє конфігурувати координати X / Y з першими двома параметрами, а ширина / висота зображення з двома останніми.

4.4. Списки

Текст у презентації часто подається у вигляді списку, нумерованого чи ні.

Давайте тепер визначимо список пунктів маркера:

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

Аналогічно ми можемо визначити нумерований список:

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

Якщо ми працюємо з кількома списками, завжди важливо визначити indentLevel, щоб досягти належного відступу елементів.

4.5. Столи

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. Зміна порядку слайдів

Додаючи слайди до нашої презентації, корисно розмістити їх у правильному порядку, щоб мати належний потік слайдів.

Коли цього не відбувається, можна змінити порядок слайдів. Давайте подивимося, як ми можемо перенести четвертий слайд на другий:

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

5.3. Видалення слайда

Також можна видалити слайд із презентації.

Давайте подивимося, як ми можемо видалити 4-й слайд:

ppt.removeSlide(3);

6. Висновок

Цей короткий підручник проілюстрував, як використовувати API Apache POI для читання та запису файлу PowerPoint з точки зору Java.

Повний вихідний код цієї статті, як завжди, можна знайти на GitHub.