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

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

1. Вступление

В этой статье мы увидим, как создать презентацию с помощьюApache POI.

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

2. Maven Зависимости

Для начала нам нужно добавить следующие зависимости в нашpom.xml:


    org.apache.poi
    poi
    3.17


    org.apache.poi
    poi-ooxml
    3.17

Последнюю версию обоихlibraries можно загрузить с Maven Central.

3. Apache POI

Apache POI library supports both .ppt and .pptx files, и он обеспечивает реализацию HSLF для формата файла Powerpoint '97 (-2007) и XSLF для формата файла PowerPoint 2007 OOXML.

Поскольку общий интерфейс не существует для обеих реализаций,we have to remember to use the XMLSlideShow, XSLFSlide and XSLFTextShape classes when working with the newer .pptx file format.

А когда требуется работать со старым форматом.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. Text

При работе с текстом внутри презентации, как в MS PowerPoint, мы должны создать текстовое поле внутри слайда, добавить абзац, а затем добавить текст к абзацу:

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

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

При добавлении текста в презентацию иногда бывает полезно добавить гиперссылки.

После того, как мы создали объектXSLFTextRun, теперь мы можем добавить ссылку:

XSLFHyperlink link = r.createHyperlink();
link.setAddress("http://www.example.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);

Однакоwithout a proper configuration, the image will be placed in the top left corner of the slide. Чтобы разместить его правильно, мы должны настроить его точку привязки:

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

XSLFPictureShape принимаетRectangle в качестве точки привязки, что позволяет нам настраивать координаты 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. таблицы

Таблицы являются еще одним ключевым объектом в презентации и полезны, когда мы хотим отобразить данные.

Начнем с создания таблицы:

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. Изменение презентации

Не всегда при работе со слайд-шоу нам нужно создавать новое, но мы должны изменить уже существующее.

Давайте посмотрим на тот, который мы создали в предыдущем разделе, а затем мы можем начать его изменять:

image

5.1. Чтение презентации

Чтение презентации довольно просто и может быть выполнено с помощью перегруженного конструктораXMLSlideShow, который принимает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. Заключение

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

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