1. введение
В этой статье мы рассмотрим, как создать презентацию с помощью Apache POI .
Эта библиотека дает нам возможность создавать презентации PowerPoint, читать существующие и изменять их содержимое.
2. Зависимости Maven
Для начала нам нужно добавить следующие зависимости в ваш pom.xml :
org.apache.poi poi 3.17 org.apache.poi poi-ooxml 3.17
Последнюю версию обеих библиотек можно загрузить с Maven Central.
3. POI Apache
Библиотека Apache POI поддерживает как .ppt , так и .pptx файлы , а также обеспечивает реализацию HSLF для формата файла Powerpoint ’97(-2007) и XSLF для формата файла PowerPoint 2007 OOXML.
Поскольку общий интерфейс не существует для обеих реализаций, мы должны помнить об использовании классов XML SlideShow , 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("http://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");
В случае, если мы работаем с несколькими списками, всегда важно определить уровень отступа для достижения правильного отступа элементов.
4.5. Таблицы
Таблицы являются еще одним ключевым объектом в презентации и полезны, когда мы хотим отобразить данные.
Давайте начнем с создания таблицы:
XSLFTable tbl = slide.createTable(); tbl.setAnchor(new Rectangle(50, 50, 450, 300));
Теперь мы можем добавить заголовок:
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); }
После завершения заголовка мы можем добавить строки и ячейки в нашу таблицу для отображения данных:
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)); } }
При работе с таблицами важно помнить, что можно настроить границу и фон каждой отдельной ячейки.
5. Изменение презентации
Не всегда при работе над слайд-шоу нам приходится создавать новое, но мы должны изменить уже существующее.
Давайте взглянем на тот, который мы создали в предыдущем разделе, а затем мы сможем начать его изменять:
5.1. Чтение презентации
Чтение презентации довольно просто и может быть выполнено с помощью XML-слайд-шоу перегруженного конструктора, который принимает FileInputStream :
XMLSlideShow ppt = new XMLSlideShow( new FileInputStream("slideshow.pptx"));
5.2. Изменение Порядка Слайдов
При добавлении слайдов в нашу презентацию рекомендуется расположить их в правильном порядке, чтобы обеспечить надлежащий поток слайдов.
Когда этого не происходит, можно изменить порядок слайдов. Давайте посмотрим, как мы можем переместить четвертый слайд, чтобы он стал вторым:
Listslides = ppt.getSlides(); XSLFSlide slide = slides.get(3); ppt.setSlideOrder(slide, 1);
5.3. Удаление слайда
Также можно удалить слайд из презентации.
Давайте посмотрим, как мы можем удалить 4-й слайд:
ppt.removeSlide(3);
6. Заключение
В этом кратком руководстве показано, как использовать Apache POI API для чтения и записи файла PowerPoint с точки зрения Java.
Полный исходный код этой статьи можно найти, как всегда, на GitHub .