Apache POI PPT - PowerPoint в Java
Часто бывает так, что приложению необходимо генерировать отчеты в формате Microsoft Office ppt или pptx, точно так же, как ему нужно редактировать и читать файлы Power Point. Java-программист, который хочет создавать файлы MS Office, должен использовать библиотеку Java, и среди них есть библиотека Apache, известная своей эффективностью.
Apache POI — это API, который позволяет создавать, изменять и отображать файлы MS Office. Этот книжный магазин с открытым исходным кодом разработан и распространяется Apache Software Foundation.
Это учебное пособие предназначено для тех, кому необходимо читать, создавать и редактировать файлы Power Point с помощью Java. В нем объясняются основные возможности библиотеки Apache POI и ее основные функции для выполнения операций с файлами Power Point.
Apache POI — это API, который позволяет создавать, изменять и отображать файлы MS Office. Этот книжный магазин с открытым исходным кодом разработан и распространяется Apache Software Foundation.
Это учебное пособие предназначено для тех, кому необходимо читать, создавать и редактировать файлы Power Point с помощью Java. В нем объясняются основные возможности библиотеки Apache POI и ее основные функции для выполнения операций с файлами Power Point.
Загрузите и установите Apache POI PPT
Загрузите последнюю версию Apache POI с официального сайта (Download Apache POI PPT) и распакуйте содержимое в папку проекта, чтобы затем связать необходимые библиотеки с приложением. Нам понадобится следующий .jar файлов:
- poi.jar
- poi-oxml.jar
- poi-oxml-schema.jar
- log4j.jar
- xmlbeans.jar
Классы и методы
Apache POI содержит классы и методы для работы с файлами Excel, Word и Power Point. Мы уже объясняли эти классы для excel и word в предыдущих статьях. Мы покажем вам классы, связанные с Power Point:
- XMLSlideShow: Для создания презентации и управления ею у вас есть следующий класс XMLSlideShow в org.apache.poi.xslf.usermoder.
- XSLFSlide: создает слайд в презентации и управляет им.
- XSLFSlideMaster: для презентации, содержащей различные макеты слайдов. Класс XSLFSlideMaster предоставляет доступ к следующим макетам.
- XSLFSlideLayout: позволяет управлять макетами слайда.
- XSLFTextParagraph: вы можете написать текст на слайде с помощью класса XSLFTextParagraph.
- XSLFTextRun: этот класс обрабатывает форматирование текста (гиперссылки, цвета, шрифты и т.д.).
- XSLFTextShape: Этот класс обрабатывает фигуры, содержащие текст.
- XSLFHyperlink: позволяет создавать гиперссылки в презентации.
Создайте пустую презентацию Power Point
Теперь давайте посмотрим, как создать презентацию с помощью Java. Чтобы создать пустую презентацию, необходимо создать экземпляр XMLSlideShow class:
XMLSlideShow ppt = new XMLSlideShow();
Сохраните изменения в документе PPT с помощью FileOutputStream:
После добавления новых слайдов вы можете читать, записывать и выполнять операции с этими слайдами.
File file=new File("C://POIPPT//Examples//example1.pptx");Приведенный ниже код представляет собой полную программу для создания пустого документа PowerPoint:
FileOutputStream out = new FileOutputStream(file);
ppt.write(out);
import java.io.File;Компиляция и выполнение этого кода создает пустой файл exemple.pptx в каталоге проекта, который выглядит следующим образом:
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;
public class PowerPoint {
public static void main(String args[]) выбрасывает IOException{
//создаем новое пустое слайд-шоу
XMLSlideShow ppt = new XMLSlideShow();
//создаем объект FileOutputStream для сохранения документа PPT
File file =new File("exemple.pptx");
FileOutputStream fis = new FileOutputStream(file);
//сохраняем файл
ppt.write(fis);
System.out.println("файл успешно создан");
fis.close();
}
}
Измените или отредактируйте существующий файл PowerPoint
Чтобы открыть существующую презентацию, создайте экземпляр класса XMLSlideShow и передайте объект FileInputStream файла, который вы хотите изменить, в качестве аргумента в конструкторе XMLSlideShow.File file=new File("C://POIPPT//Examples//example1.pptx");Вы можете добавить слайды в презентацию с помощью метода createSlide() класса XMLSlideShow.
FileInputstream inputstream =new FileInputStream(файл);
XMLSlideShow ppt = new XMLSlideShow(inputstream);
XSLFSlide slide1= ppt.createSlide();Откроется следующая программа, которая добавит слайды в уже созданный файл exemple.pptx:
import java.io.File;Программа выдает следующий результат:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;
public class EditPresentation {
public static void main(String ar[]) выбрасывает IOException{
//открываем существующий файл powerpoint
File file = new File("exemple.pptx");
FileInputStream inputstream=new FileInputStream(файл);
XMLSlideShow ppt = new XMLSlideShow(inputstream);
//добавляем слайды в presentation
XSLFSlide slide1 = ppt.createSlide();
XSLFSlide slide2 = ppt.createSlide();
XSLFSlide slide3 = ppt.createSlide();
//сохранить изменения
FileOutputStream fis = new FileOutputStream(file);
ppt.write(fis);
System.out.println("Изменения выполнены успешно");
fis.close();
}
}
Изменения сделаны успешноДокумент изменен тремя новыми слайдами:
После добавления новых слайдов вы можете читать, записывать и выполнять операции с этими слайдами.
Доступные макеты
Презентации PowerPoint имеют макеты для каждого слайда, которые можно выбрать. Для начала давайте найдем список всех доступных макетов.
Существуют различные слайды, называемые мастер-слайдами, и в каждом образце слайдов есть несколько макетов слайдов.
- Вы можете получить список слайдов с помощью метода getSlideMasters() класса XMLSlideShow.
- Вы можете получить список макетов слайдов из каждого образца слайдов, вызвав метод getSlideLayouts() класса XSLFSlideMaster.
- Вы можете получить имя макета из объекта layout С помощью метода getType() класса XSLFSlideLayout.
Приведенная ниже программа отображает все доступные макеты в формате PPT:
import java.io.IOException;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlideLayout;
import org.apache.poi.xslf.usermodel.XSLFSlideMaster;
public class SlideLayouts {
public static void main(String args[]) выбрасывает IOException{
XMLSlideShow ppt = new XMLSlideShow();
System.out.println("Доступные макеты");
//получаем список всех слайдов masters
for(XSLFSlideMaster master: ppt.getSlideMasters()){
//получаем список всех макетов слайдов в каждом слайде master
for(XSLFSlideLayout layout : master.getSlideLayouts()){
//получает имя layout
System.out.println(layout.getType());
}
}
}
}
Output:
Available layoutsНа рисунке ниже показаны некоторые макеты, доступные в MS Office 2007:
BLANK
TITLE_ONLY
SECTION_HEADER
PIC_TX
TITLE_AND_CONTENT
TITLE
VERT_TX< br />VERT_TITLE_AND_TX
TWO_TX_TWO_OBJ
TWO_OBJ
OBJ_TX
Создайте слайд, использующий макет заголовка
Давайте создадим слайд, использующий макет Title:
1- Создайте пустую презентацию, создав экземпляр класса XMLSlideShow:
XMLSlideShow ppt=new XMLSlideShow();
2- Получить список образцов слайдов с помощью метода getSlideMasters(). затем выберите нужный образец слайдов с его индексом:
XSLFSlideMaster slideMaster = ppt.getSlideMasters().get(0);
Здесь мы получаем образец слайдов по умолчанию, который находится в позиции 0 массива.
3- Выбираем макет с помощью метода getLayout() класса XSLFSlideMaster. Этот метод принимает параметр, который является статической переменной, представляющей требуемый макет. В этом классе есть несколько переменных, каждая из которых представляет макет слайда.
В следующем коде показано, как создать макет заголовка:
XSLFSlideLayout titleLayout = slideMaster.getLayout(SlideLayout.TITLE);
4- Создайте новый слайд, передав объект макета слайда в качестве параметра.
5- Выберите заполнитель с помощью метода getPlaceholder() класса XSLFSlide. Этот метод принимает целочисленный параметр. При передаче значения 0 получается объект XSLFTextSlide, используемый для доступа к области текста заголовка на слайде. Измените заголовок с помощью setText():
XSLFSlide slide = ppt.createSlide(titleLayout);
5- Выберите заполнитель с помощью метода getPlaceholder() класса XSLFSlide. Этот метод принимает целочисленный параметр. При передаче значения 0 получается объект XSLFTextSlide, используемый для доступа к области текста заголовка на слайде. Измените заголовок с помощью setText():
XSLFTextShape title = slide.getPlaceholder(0);
title.setText("JavaCoder");
Вот полная программа:
import java.io.File;Output:
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.xslf.usermodel.SlideLayout;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;
import org.apache.poi.xslf.usermodel.XSLFSlideLayout;
import org.apache.poi.xslf.usermodel.XSLFSlideMaster;
import org.apache.poi.xslf.usermodel.XSLFTextShape;
public class TitleLayout {
public static void main(String args[]) выбрасывает IOException{
XMLSlideShow ppt = new XMLSlideShow();
//получаем объект slidemaster
XSLFSlideMaster slideMaster = ppt.getSlideMasters().get(0);
//получаем нужный макет слайда
XSLFSlideLayout titleLayout = slideMaster.getLayout(SlideLayout.TITLE);
//создаем слайд с выбранным slidelayout
XSLFSlide slide = ppt.createSlide(titleLayout);
//изменить заполнитель 0, который является заголовком
XSLFTextShape title = slide.getPlaceholder(0);
//edit title
title.setText("JavaCoder");
//создаем новый файл pptx
File file=new File("Exemple.pptx");
FileOutputStream fos = new FileOutputStream(file);
//сохранить изменения
ppt.write(fos);
System.out.println("слайд успешно создан");
fos.close();
}
}
slide создан успешно
Измените заголовок и содержимое макета
Давайте создадим слайд, используя заголовок и макет, выполнив следующие действия:
1- Создайте пустую презентацию, создав экземпляр класса XMLSlideShow.
2- Получить список всех образцов слайдов с помощью метода getSlideMasters()
3- Получаем нужный макет с помощью метода getLayout() класса XSLFSlideMaster:
4- Создайте новый слайд, передав объект макета в качестве параметра:
XSLFSlide slide = ppt.createSlide(SlideLayout.TITLE_AND_CONTENT);
5- Выберите заполнитель с помощью getPlaceholder():
XSLFTextShape title = slide.getPlaceholder(1);
title1.setText("Введение");
6 - Очистите текст слайда, вызвав метод clearText() класса XSLFTextShape.
body.clearText();7- Добавить новый абзац с помощью метода addNewTextParagraph(). Теперь вы можете добавить текст с помощью метода addNewTextRun(), затем setText().
body.addNewTextParagraph().addNewTextRun().setText("это мое первое тело слайда");Вот полный код:
import java.io.File;Output:
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.xslf.usermodel.SlideLayout;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;
import org.apache.poi.xslf.usermodel.XSLFSlideLayout;
import org.apache.poi.xslf.usermodel.XSLFSlideMaster;
import org.apache.poi.xslf.usermodel.XSLFTextShape;
public class TitleAndBodyLayout {
public static void main(String args[]) выбрасывает IOException{
XMLSlideShow ppt = new XMLSlideShow();
//получаем объект slidemaster
XSLFSlideMaster slideMaster = ppt.getSlideMasters().get(0);
//получаем нужный макет слайда
XSLFSlideLayout titleLayout = slideMaster.getLayout(SlideLayout.TITLE);
//создаем слайд с выбранным slidelayout
XSLFSlide slide = ppt.createSlide(titleLayout);
//изменить заполнитель 0, который является заголовком
XSLFTextShape title = slide.getPlaceholder(0);
//edit title
title.setText("Введение");
//выбираем заполнитель 1, который является text
XSLFTextShape body = slide.getPlaceholder(1);
//удаляем старый контент
body.clearText();
//добавляем абзац
body.addNewTextParagraph().addNewTextRun().setText("Мой первый слайд");
//создаем новый файл pptx
File file=new File("Exemple.pptx");
FileOutputStream fos = new FileOutputStream(file);
//сохранить изменения
ppt.write(fos);
System.out.println("слайд успешно создан");
fos.close();
}
}
slide создан успешно
Получение и изменение размера слайда
Размер слайда получается с помощью метода getPageSize() команды XMLSlideShow.
java.awt.Dimension pgsize = ppt.getPageSize();
Чтобы изменить размер слайда в java, используйте метод setPageSize() файла XMLSlideShow.
ppt.setPageSize(new java.awt.Dimension(1024, 768));
Вот полная программа:
import java.awt.Dimension;Output:
импорт java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
public class ChangingSlide {
public static void main(String args[]) выбрасывает IOException{
File file = new File("Exemple.pptx");
XMLSlideShow ppt = new XMLSlideShow();
//получаем текущее измерение
Измерение pptsize = ppt.getPageSize();
System.out.println("Текущий размер слайда:");
System.out.println("width:" + pptsize.width);
System.out.println("height:" + pptsize.height);
//изменить dimension
ppt.setPageSize(new java.awt.Dimension(1024,400));
FileOutputStream out = new FileOutputStream(file);
ppt.write(out);
System.out.println("изменен размер слайда");
out.close();
}
}
Текущий размер слайда:После изменения размера слайд выглядит следующим образом:
ширина:720
height:540
размер слайда был изменен
Изменить порядок слайдов
Вы можете изменить порядок с помощью метода setSlideOrder(). Извлеките все слайды с помощью метода getSlides(), затем выберите из таблицы слайдов и измените порядок с помощью метода setSlideOrder():
//выберите третий слайд
XSLFSlide slide = slides.get(2);
//ставим первым
ppt.setSlideOrder(slide, 1);
В следующем коде показан пример:
Вы должны прочитать файл изображения, которое будет добавлено, и преобразовать его в массив байтов с помощью метода IOUtils.toByteArray().
import java.io.File;Отображение до и после переключения между слайдами 1 и 3:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;
public class ReorderSlide {
public static void main(String args[]) выбрасывает IOException{
File file=new File("exemple.pptx");
XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(file));
//получить список слайдов
java.util.Listslides = ppt.getSlides();
//выбираем 3-й слайд
XSLFSlide selectesdslide = slides.get(2);
//ставим на первую позицию
ppt.setSlideOrder(selectesdslide, 0);
FileOutputStream fos = new FileOutputStream(file);
ppt.write(fos);
fos.close();
}
}
Front |
После |
Delete slides
Вы можете удалить слайды, вызвав метод removeSlide(). Этот метод принимает целое число, представляющее позицию удаляемого слайда.Если мы применим эту операцию удаления к примеру выше, который содержит три слайда (1, 2 и 3), мы получим следующий вывод:
File file=new File("fichier1.pptx");
XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(file));
//удалить слайд в позиции 0
ppt.removeSlide(0);
.
.
.
Add Image
Вы можете добавить изображения в презентацию с помощью метода createPicture() класса XSLFSlide. Метод createPicture() принимает изображение в формате массива байтов или bytes.Вы должны прочитать файл изображения, которое будет добавлено, и преобразовать его в массив байтов с помощью метода IOUtils.toByteArray().
//read imageТеперь нам нужно добавить созданное изображение в презентацию с помощью метода addPicture(). этот метод принимает байтовую переменную, полученную в результате преобразования image.
File image=new File("C://logo.jpg");
//преобразуем изображение в байт array
byte[] bimage = IOUtils.toByteArray(new FileInputStream(image));
PictureData picdata = ppt.addPicture(picture, PictureData.PictureType.PNG);наконец, интегрируем изображение в слайд с помощью createPicture():
XSLFPictureShape pic = slide.createPicture(picdata);Следующая программа реализует следующие шаги для добавления изображения:
import java.io.File;После создания файл выглядит следующим образом:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.sl.usermodel.PictureData;
import org.apache.poi.util.IOUtils;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFPictureData;
import org.apache.poi.xslf.usermodel.XSLFPictureShape;
import org.apache.poi.xslf.usermodel.XSLFSlide;
public class AddImage {
public static void main(String args[]) выбрасывает IOException{
XMLSlideShow ppt = new XMLSlideShow();
XSLFSlide slide = ppt.createSlide();
//читаем изображение
Файл image=new File("logo.png");
//преобразуем изображение в байты
byte[] picture = IOUtils.toByteArray(new FileInputStream(image));
//добавляем изображение в presentation
PictureData picdata = ppt.addPicture(picture, PictureData.PictureType.PNG);
//создаем слайд для этого добавленного изображения
XSLFPictureShape pic = slide.createPicture(picdata);
File file=new File("diapoimage.pptx");
FileOutputStream fos = new FileOutputStream(file);
ppt.write(fos);
System.out.println("изображение добавлено!");
fos.close();
}
}
Formatting Text
Текст в презентации может быть отформатирован с помощью методов класса XSLFTextRun. Для этого необходимо создать объект XSLFTextRun, как показано ниже:
//создание слайда с заголовком и содержимым
XSLFSlide slide = ppt.createSlide(slidelayout);
//выбираем заполнитель 1
XSLFTextShape body = slide.getPlaceholder(1);
//добавление абзаца
XSLFTextParagraph paragraph=body.addNewTextParagraph();
//создание объекта TextRun
XSLFTextRun run = paragraph.addNewTextRun();
Вы можете изменить размер шрифта текста в презентации с помощью setFontSize():
run.setFontColor(java.awt.Color.blue);Следующий фрагмент кода показывает, как применять различные стили: полужирный, курсив, подчеркивание к тексту в Power Point.
run.setFontSize(26);
//измените текст на BoldЧтобы между абзацами был пробел, добавьте addLineBreak() из XSLFTextParagraph:
run.setBold(true);
//меняем текст на Italic
run.setItalic(true)
//Рисует линию посередине текста
run.setStrikethrough(true);
//подчеркивание текста
run.setUnderline(true);
paragraph.addLineBreak();Следующая программа собирает все упомянутые методы:
import java.io.File;Execution:
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.xslf.usermodel.SlideLayout;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;
import org.apache.poi.xslf.usermodel.XSLFSlideLayout;
import org.apache.poi.xslf.usermodel.XSLFSlideMaster;
import org.apache.poi.xslf.usermodel.XSLFTextParagraph;
import org.apache.poi.xslf.usermodel.XSLFTextRun;
import org.apache.poi.xslf.usermodel.XSLFTextShape;
public class TextFormatting {
public static void main(String args[]) выбрасывает IOException{
//создаем пустую презентацию
XMLSlideShow ppt = new XMLSlideShow();
//получаем slidemaster
XSLFSlideMaster slideMaster = ppt.getSlideMasters()[0];
//выбираем макет из предоставленного списка
XSLFSlideLayout slidelayout = slideMaster.getLayout(SlideLayout.TITLE_AND_CONTENT);
//создаем слайд с заголовком и содержимым
XSLFSlide slide = ppt.createSlide(slidelayout);
//select title
XSLFTextShape body = slide.getPlaceholder(1);
//удаляем существующий текст в slide
body.clearText();
//добавляем новый абзац
XSLFTextParagraph paragraph=body.addNewTextParagraph();
//строка 1
XSLFTextRun run1 = paragraph.addNewTextRun();
run1.setText("Цветная линия");
//изменить цвет текста
run1.setFontColor(java.awt.Color.red);
//меняем размер шрифта
run1.setFontSize(24);
//перейти к следующей строке
paragraph.addLineBreak();
//строка 2
XSLFTextRun run2 = paragraph.addNewTextRun();
run2.setText("ЖИРНАЯ строка");
run2.setFontColor(java.awt.Color.CYAN);
//отобразить текст жирным шрифтом
run2.setBold(true);
paragraph.addLineBreak();
//строка 3
XSLFTextRun run3 = paragraph.addNewTextRun();
run3.setText("Зачеркнутая строка");
run3.setFontSize(12);
//отрисовка текста курсивом
run3.setItalic(true);
//зачеркнутый
run3.setStrikethrough(true);
paragraph.addLineBreak();
//строка 4
XSLFTextRun run4 = paragraph.addNewTextRun();
run4.setText("Подчеркнутая строка");
run4.setUnderline(true);
//подчеркивание текста
paragraph.addLineBreak();
//создаем файловый объект
File file=new File("TextFormat.pptx");
FileOutputStream out = new FileOutputStream(file);
//сохранить изменения
ppt.write(out);
out.close();
}
}