Во многих корпоративных приложениях это необходимо.

Всегда интересно иметь возможность создавать презентации Microsoft PowerPoint PPTX в приложении, чтобы, например, предлагать пользователям слайд-шоу. В этом руководстве вы узнаете, как создавать презентации Microsoft PowerPoint в приложении Java.

Для этого я собираюсь использовать отличный Apache POI API, доступный прямо здесь: https://poi.apache.org/download.html.

Обратите внимание, что вы можете посмотреть это руководство в виде видео на YouTube:

Добавление Apache POI в качестве зависимости

Первый шаг — добавить Apache POI в качестве зависимости Maven в файл сборки вашего проекта Java:

В этом руководстве я выбрал создание файлов PowerPoint PPTX, но логика создания файла PowerPoint более старого формата PPT такая же. Итак, я добавил обе зависимости в свой Maven POM, но для моего примера нужен только poi-ooxml.

Создание файла PowerPoint

С API Apache POI файл PowerPoint представлен интерфейсом SlideShow. Так же, как я хочу сгенерировать файл PPTX, мне нужно создать экземпляр XMLSlideShow. После создания экземпляра XMLSlideShow мне нужно создать первый слайд. Я получаю экземпляр XSLFSlideMaster по умолчанию, а затем получаю макет слайда. Затем мне нужно вызвать метод createSlide моего XMLSlideShow, чтобы создать слайд:

Я получаю элемент заголовка слайда, представленный объектом XSLFTextShape. Я очищаю текст по умолчанию, вызывая его метод clearText(). Затем я добавляю новый текстовый абзац и новый текст. Я настраиваю текст, вызывая некоторые методы, такие как setText(), setFontColor() или еще setFontSize().

Следующий шаг — добавить изображение из ресурсов моего проекта Maven на слайд. Я загружаю изображение как InputStream и преобразовываю его в массив байтов. Я использую объект XSLFPictureData библиотеки Apache POI для загрузки этого массива byte. Затем я могу создать XSLFPictureShape, для которого я задаю привязку с помощью абсолютного позиционирования благодаря объекту Rectangle:

Я могу добавить второй слайд с той же логикой. Единственное отличие состоит в том, что я использую новый макет: SlideLayout.TITLE_AND_CONTENT. Я установил текст для заголовка и могу создать ссылку на этот заголовок с помощью метода createHyperLink созданного объекта XSLFTextRun.

Для содержания моего слайда я добавляю только несколько текстов:

Я добавляю третий слайд, чтобы узнать, как определять списки. Сначала я создаю новый текстовый абзац, вызывая метод addNewTextParagraph() объекта XSLFTextShape, представляющего содержимое моего слайда. Я передаю true методу setBullet, чтобы определить абзац как список. Затем я определяю уровень отступа с помощью метода setIndentLevel. Я добавляю новый текст в новый абзац, который будет второй записью в моем списке. Наконец, я заканчиваю список вторым уровнем отступа и определенной нумерацией маркеров. Для этого я вызываю метод setBulletAutoNumber для соответствующего абзаца:

Создание файла PowerPoint

Наконец, мне нужно сгенерировать файл PowerPoint, записав содержимое моего экземпляра XMLSlideShow в файл. Для этого я создаю экземпляр FileOutputStream с именем моего файла, а затем передаю этот экземпляр в качестве параметра метода записи объекта XMLSlideShow:

Полный исходный код класса PowerPoint

Полный исходный код моего класса PowerPoint доступен чуть ниже:

Конечный результат

При выполнении класса PowerPoint на JVM файл MyPresentation.pptx должен быть сгенерирован на вашем компьютере, и вы должны получить следующий результат: