Рубрики
Без рубрики

Создание презентации MS PowerPoint на Java

Быстрый и практический пример создания презентаций PowerPoint с использованием Java и Apache POI.

Автор оригинала: baeldung.

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. Изменение Порядка Слайдов

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

Когда этого не происходит, можно изменить порядок слайдов. Давайте посмотрим, как мы можем переместить четвертый слайд, чтобы он стал вторым:

List slides = ppt.getSlides();

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

5.3. Удаление слайда

Также можно удалить слайд из презентации.

Давайте посмотрим, как мы можем удалить 4-й слайд:

ppt.removeSlide(3);

6. Заключение

В этом кратком руководстве показано, как использовать Apache POI API для чтения и записи файла PowerPoint с точки зрения Java.

Полный исходный код этой статьи можно найти, как всегда, на GitHub .