Управление текстовыми абзацами PowerPoint в Java
Aspose.Slides предоставляет все интерфейсы и классы, необходимые для работы с текстом, абзацами и фрагментами PowerPoint в Java.
- Aspose.Slides предоставляет интерфейс ITextFrame, позволяющий добавлять объекты, представляющие абзац. Объект
ITextFameможет содержать один или несколько абзацев (каждый абзац создаётся переводом строки). - Aspose.Slides предоставляет интерфейс IParagraph, позволяющий добавлять объекты, представляющие фрагменты. Объект
IParagraphможет содержать один или несколько фрагментов (коллекцию объектов iPortions). - Aspose.Slides предоставляет интерфейс IPortion, позволяющий добавлять объекты, представляющие текст и его свойства форматирования.
Объект IParagraph способен обрабатывать тексты с различными свойствами форматирования через свои вложенные объекты IPortion.
Добавление нескольких абзацев, содержащих несколько фрагментов
Эти шаги покажут, как добавить текстовый фрейм, содержащий 3 абзаца, и каждый абзац содержащий по 3 фрагмента:
- Создайте экземпляр класса Presentation.
- Получите ссылку на нужный слайд по его индексу.
- Добавьте прямоугольную IAutoShape на слайд.
- Получите ITextFrame, связанный с IAutoShape.
- Создайте два объекта IParagraph и добавьте их в коллекцию
IParagraphsобъекта ITextFrame. - Создайте три объекта IPortion для каждого нового
IParagraph(два объекта Portion для абзаца по умолчанию) и добавьте каждый объектIPortionв коллекцию IPortion соответствующегоIParagraph. - Задайте текст для каждого фрагмента.
- Примените желаемые свойства форматирования к каждому фрагменту, используя свойства форматирования, доступные в объекте
IPortion. - Сохраните изменённую презентацию.
Этот Java‑код реализует шаги по добавлению абзацев, содержащих фрагменты:
// Создать экземпляр класса Presentation, представляющего файл PPTX
Presentation pres = new Presentation();
try {
// Доступ к первому слайду
ISlide slide = pres.getSlides().get_Item(0);
// Добавить AutoShape типа Rectangle
IAutoShape ashp = slide.getShapes().addAutoShape(ShapeType.Rectangle, 50, 150, 300, 150);
// Получить TextFrame AutoShape
ITextFrame tf = ashp.getTextFrame();
// Создать абзацы и фрагменты с различными форматами текста
IParagraph para0 = tf.getParagraphs().get_Item(0);
IPortion port01 = new Portion();
IPortion port02 = new Portion();
para0.getPortions().add(port01);
para0.getPortions().add(port02);
IParagraph para1 = new Paragraph();
tf.getParagraphs().add(para1);
IPortion port10 = new Portion();
IPortion port11 = new Portion();
IPortion port12 = new Portion();
para1.getPortions().add(port10);
para1.getPortions().add(port11);
para1.getPortions().add(port12);
IParagraph para2 = new Paragraph();
tf.getParagraphs().add(para2);
IPortion port20 = new Portion();
IPortion port21 = new Portion();
IPortion port22 = new Portion();
para2.getPortions().add(port20);
para2.getPortions().add(port21);
para2.getPortions().add(port22);
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
IPortion portion = tf.getParagraphs().get_Item(i).getPortions().get_Item(j);
portion.setText("Portion0" + j);
if (j == 0) {
portion.getPortionFormat().getFillFormat().setFillType(FillType.Solid);
portion.getPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.RED);
portion.getPortionFormat().setFontBold(NullableBool.True);
portion.getPortionFormat().setFontHeight(15);
} else if (j == 1) {
portion.getPortionFormat().getFillFormat().setFillType(FillType.Solid);
portion.getPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLUE);
portion.getPortionFormat().setFontItalic(NullableBool.True);
portion.getPortionFormat().setFontHeight(18);
}
}
}
// Сохранить PPTX на диск
pres.save("multiParaPort_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Управление маркерами абзацев
Маркированные списки помогают быстро и эффективно организовать и представить информацию. Абзацы с маркерами всегда проще читать и понимать.
- Создайте экземпляр класса Presentation.
- Получите ссылку на нужный слайд по его индексу.
- Добавьте autoshape на выбранный слайд.
- Получите TextFrame автoshape.
- Удалите абзац по умолчанию в
TextFrame. - Создайте первый экземпляр абзаца, используя класс Paragraph.
- Установите для абзаца тип маркера
TypeравнымSymbolи задайте символ маркера. - Задайте
Textабзаца. - Установите
Indentабзаца для маркера. - Задайте цвет маркера.
- Задайте высоту маркера.
- Добавьте новый абзац в коллекцию абзацев
TextFrame. - Добавьте второй абзац и повторите процесс, указанный в шагах 7‑13.
- Сохраните презентацию.
Этот Java‑код демонстрирует, как добавить маркер к абзацу:
// Создает экземпляр класса Presentation, представляющего файл PPTX
Presentation pres = new Presentation();
try {
// Получает первый слайд
ISlide slide = pres.getSlides().get_Item(0);
// Добавляет и получает AutoShape
IAutoShape aShp = slide.getShapes().addAutoShape(ShapeType.Rectangle, 200, 200, 400, 200);
// Получает текстовый фрейм авток формы
ITextFrame txtFrm = aShp.getTextFrame();
// Удаляет абзац по умолчанию
txtFrm.getParagraphs().removeAt(0);
// Создает абзац
Paragraph para = new Paragraph();
// Устанавливает стиль маркера абзаца и символ
para.getParagraphFormat().getBullet().setType(BulletType.Symbol);
para.getParagraphFormat().getBullet().setChar((char)8226);
// Устанавливает текст абзаца
para.setText("Welcome to Aspose.Slides");
// Устанавливает отступ маркера
para.getParagraphFormat().setIndent(25);
// Устанавливает цвет маркера
para.getParagraphFormat().getBullet().getColor().setColorType(ColorType.RGB);
para.getParagraphFormat().getBullet().getColor().setColor(Color.BLACK);
para.getParagraphFormat().getBullet().setBulletHardColor(NullableBool.True); // установить IsBulletHardColor в true, чтобы использовать собственный цвет маркера
// Устанавливает высоту маркера
para.getParagraphFormat().getBullet().setHeight(100);
// Добавляет абзац в текстовый фрейм
txtFrm.getParagraphs().add(para);
// Создает второй абзац
Paragraph para2 = new Paragraph();
// Устанавливает тип маркера абзаца и стиль
para2.getParagraphFormat().getBullet().setType(BulletType.Numbered);
para2.getParagraphFormat().getBullet().setNumberedBulletStyle(NumberedBulletStyle.BulletCircleNumWDBlackPlain);
// Добавляет текст абзаца
para2.setText("This is numbered bullet");
// Устанавливает отступ маркера
para2.getParagraphFormat().setIndent(25);
para2.getParagraphFormat().getBullet().getColor().setColorType(ColorType.RGB);
para2.getParagraphFormat().getBullet().getColor().setColor(Color.BLACK);
para2.getParagraphFormat().getBullet().setBulletHardColor(NullableBool.True); // установить IsBulletHardColor в true, чтобы использовать собственный цвет маркера
// Устанавливает высоту маркера
para2.getParagraphFormat().getBullet().setHeight(100);
// Добавляет абзац в текстовый фрейм
txtFrm.getParagraphs().add(para2);
// Сохраняет измененную презентацию
pres.save("Bullet_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Управление графическими маркерами
Маркированные списки помогают быстро и эффективно организовать и представить информацию. Абзацы с изображениями легко читать и понимать.
- Создайте экземпляр класса Presentation.
- Получите ссылку на нужный слайд по его индексу.
- Добавьте autoshape на слайд.
- Добавьте и получите доступ к ITextFrame автoshape.
- Удалите абзац по умолчанию в
ITextFrame. - Создайте первый экземпляр абзаца, используя класс Paragraph.
- Загрузите изображение в IPPImage.
- Установите тип маркера как Picture и задайте изображение.
- Задайте
Textабзаца. - Установите
Indentабзаца для маркера. - Задайте цвет маркера.
- Задайте высоту маркера.
- Добавьте новый абзац в коллекцию абзацев
TextFrame. - Добавьте второй абзац и повторите процесс, основываясь на предыдущих шагах.
- Сохраните изменённую презентацию.
Этот Java‑код демонстрирует, как добавить и управлять графическими маркерами:
// Создает экземпляр класса Presentation, представляющего файл PPTX
Presentation presentation = new Presentation();
try {
// Получает первый слайд
ISlide slide = presentation.getSlides().get_Item(0);
// Создает изображение для маркеров
IPPImage picture;
IImage image = Images.fromFile("bullets.png");
try {
picture = presentation.getImages().addImage(image);
} finally {
if (image != null) image.dispose();
}
// Добавляет и получает AutoShape
IAutoShape autoShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 200, 200, 400, 200);
// Получает текстовый фрейм авток формы
ITextFrame textFrame = autoShape.getTextFrame();
// Удаляет абзац по умолчанию
textFrame.getParagraphs().removeAt(0);
// Создает новый абзац
Paragraph paragraph = new Paragraph();
paragraph.setText("Welcome to Aspose.Slides");
// Устанавливает стиль маркера абзаца и изображение
paragraph.getParagraphFormat().getBullet().setType(BulletType.Picture);
paragraph.getParagraphFormat().getBullet().getPicture().setImage(picture);
// Устанавливает высоту маркера
paragraph.getParagraphFormat().getBullet().setHeight(100);
// Добавляет абзац в текстовый фрейм
textFrame.getParagraphs().add(paragraph);
// Сохраняет презентацию в файл PPTX
presentation.save("ParagraphPictureBulletsPPTX_out.pptx", SaveFormat.Pptx);
// Сохраняет презентацию в файл PPT
presentation.save("ParagraphPictureBulletsPPT_out.ppt", SaveFormat.Ppt);
} catch (IOException e) {
} finally {
if (presentation != null) presentation.dispose();
}
Управление многоуровневыми маркерами
Маркированные списки помогают быстро и эффективно организовать и представить информацию. Многоуровневые маркеры легко читаются и понимаются.
- Создайте экземпляр класса Presentation.
- Получите ссылку на нужный слайд по его индексу.
- Добавьте autoshape в новый слайд.
- Получите TextFrame автoshape.
- Удалите абзац по умолчанию в
TextFrame. - Создайте первый экземпляр абзаца через класс Paragraph и задайте глубину 0.
- Создайте второй экземпляр абзаца через класс
Paragraphи задайте глубину 1. - Создайте третий экземпляр абзаца через класс
Paragraphи задайте глубину 2. - Создайте четвёртый экземпляр абзаца через класс
Paragraphи задайте глубину 3. - Добавьте новые абзацы в коллекцию абзацев
TextFrame. - Сохраните изменённую презентацию.
Этот Java‑код демонстрирует, как добавить и управлять многоуровневыми маркерами:
// Создает экземпляр класса Presentation, представляющего файл PPTX
Presentation pres = new Presentation();
try {
// Получает первый слайд
ISlide slide = pres.getSlides().get_Item(0);
// Добавляет и получает AutoShape
IAutoShape aShp = slide.getShapes().addAutoShape(ShapeType.Rectangle, 200, 200, 400, 200);
// Получает текстовый фрейм созданного AutoShape
ITextFrame text = aShp.addTextFrame("");
// Очищает абзац по умолчанию
text.getParagraphs().clear();
// Adds the first paragraph
IParagraph para1 = new Paragraph();
para1.setText("Content");
para1.getParagraphFormat().getBullet().setType(BulletType.Symbol);
para1.getParagraphFormat().getBullet().setChar((char)8226);
para1.getParagraphFormat().getDefaultPortionFormat().getFillFormat().setFillType(FillType.Solid);
para1.getParagraphFormat().getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
// Устанавливает уровень маркера
para1.getParagraphFormat().setDepth((short)0);
// Adds the second paragraph
IParagraph para2 = new Paragraph();
para2.setText("Second Level");
para2.getParagraphFormat().getBullet().setType(BulletType.Symbol);
para2.getParagraphFormat().getBullet().setChar('-');
para2.getParagraphFormat().getDefaultPortionFormat().getFillFormat().setFillType(FillType.Solid);
para2.getParagraphFormat().getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
// Устанавливает уровень маркера
para2.getParagraphFormat().setDepth((short)1);
// Adds the third paragraph
IParagraph para3 = new Paragraph();
para3.setText("Third Level");
para3.getParagraphFormat().getBullet().setType(BulletType.Symbol);
para3.getParagraphFormat().getBullet().setChar((char)8226);
para3.getParagraphFormat().getDefaultPortionFormat().getFillFormat().setFillType(FillType.Solid);
para3.getParagraphFormat().getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
// Устанавливает уровень маркера
para3.getParagraphFormat().setDepth((short)2);
// Adds the fourth paragraph
IParagraph para4 = new Paragraph();
para4.setText("Fourth Level");
para4.getParagraphFormat().getBullet().setType(BulletType.Symbol);
para4.getParagraphFormat().getBullet().setChar('-');
para4.getParagraphFormat().getDefaultPortionFormat().getFillFormat().setFillType(FillType.Solid);
para4.getParagraphFormat().getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
// Устанавливает уровень маркера
para4.getParagraphFormat().setDepth((short)3);
// Adds paragraphs to collection
text.getParagraphs().add(para1);
text.getParagraphs().add(para2);
text.getParagraphs().add(para3);
text.getParagraphs().add(para4);
// Writes the presentation as a PPTX file
pres.save("MultilevelBullet.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Управление абзацем с пользовательским нумерованным списком
Интерфейс IBulletFormat предоставляет свойство NumberedBulletStartWith и другие, позволяющие управлять абзацами с пользовательской нумерацией или форматированием.
- Создайте экземпляр класса Presentation.
- Получите слайд, содержащий абзац.
- Добавьте autoshape на слайд.
- Получите TextFrame автoshape.
- Удалите абзац по умолчанию в
TextFrame. - Создайте первый экземпляр абзаца через класс Paragraph и задайте NumberedBulletStartWith равным 2.
- Создайте второй экземпляр абзаца через класс
Paragraphи задайтеNumberedBulletStartWithравным 3. - Создайте третий экземпляр абзаца через класс
Paragraphи задайтеNumberedBulletStartWithравным 7. - Добавьте новые абзацы в коллекцию абзацев
TextFrame. - Сохраните изменённую презентацию.
Этот Java‑код демонстрирует, как добавить и управлять абзацами с пользовательской нумерацией или форматированием:
Presentation presentation = new Presentation();
try {
IAutoShape shape = presentation.getSlides().get_Item(0).getShapes().addAutoShape(ShapeType.Rectangle, 200, 200, 400, 200);
// Получает текстовый фрейм созданного AutoShape
ITextFrame textFrame = shape.getTextFrame();
// Удаляет существующий абзац по умолчанию
textFrame.getParagraphs().removeAt(0);
// Первый список
Paragraph paragraph1 = new Paragraph();
paragraph1.setText("bullet 2");
paragraph1.getParagraphFormat().setDepth((short)4);
paragraph1.getParagraphFormat().getBullet().setNumberedBulletStartWith((short)2);
paragraph1.getParagraphFormat().getBullet().setType(BulletType.Numbered);
textFrame.getParagraphs().add(paragraph1);
Paragraph paragraph2 = new Paragraph();
paragraph2.setText("bullet 3");
paragraph2.getParagraphFormat().setDepth((short)4);
paragraph2.getParagraphFormat().getBullet().setNumberedBulletStartWith((short)3);
paragraph2.getParagraphFormat().getBullet().setType(BulletType.Numbered);
textFrame.getParagraphs().add(paragraph2);
Paragraph paragraph5 = new Paragraph();
paragraph5.setText("bullet 7");
paragraph5.getParagraphFormat().setDepth((short)4);
paragraph5.getParagraphFormat().getBullet().setNumberedBulletStartWith((short)7);
paragraph5.getParagraphFormat().getBullet().setType(BulletType.Numbered);
textFrame.getParagraphs().add(paragraph5);
presentation.save("SetCustomBulletsNumber-slides.pptx", SaveFormat.Pptx);
} finally {
if (presentation != null) presentation.dispose();
}
Установить отступ абзаца
- Создайте экземпляр Presentation класса.
- Получите ссылку на нужный слайд по его индексу.
- Добавьте прямоугольный autoshape к слайду.
- Добавьте TextFrame с тремя абзацами к прямоугольному автoshape.
- Скройте линии прямоугольника.
- Установите отступ для каждого Paragraph через их свойство BulletOffset.
- Сохраните изменённую презентацию в файл PPT.
Этот Java‑код демонстрирует, как установить отступ абзаца:
// Создайте экземпляр класса Presentation
Presentation pres = new Presentation();
try {
// Получите первый слайд
ISlide sld = pres.getSlides().get_Item(0);
// Добавьте форму прямоугольника
IAutoShape rect = sld.getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 500, 150);
// Добавьте TextFrame к прямоугольнику
ITextFrame tf = rect.addTextFrame("This is first line \rThis is second line \rThis is third line");
// Установите автоматический размер текста под форму
tf.getTextFrameFormat().setAutofitType(TextAutofitType.Shape);
// Скрыть линии прямоугольника
rect.getLineFormat().getFillFormat().setFillType(FillType.Solid);
// Получите первый абзац в TextFrame и установите его отступ
IParagraph para1 = tf.getParagraphs().get_Item(0);
// Установка стиля маркера абзаца и символа
para1.getParagraphFormat().getBullet().setType(BulletType.Symbol);
para1.getParagraphFormat().getBullet().setChar((char)8226);
para1.getParagraphFormat().setAlignment(TextAlignment.Left);
para1.getParagraphFormat().setDepth((short)2);
para1.getParagraphFormat().setIndent(30);
// Получите второй абзац в TextFrame и установите его отступ
IParagraph para2 = tf.getParagraphs().get_Item(1);
para2.getParagraphFormat().getBullet().setType(BulletType.Symbol);
para2.getParagraphFormat().getBullet().setChar((char)8226);
para2.getParagraphFormat().setAlignment(TextAlignment.Left);
para2.getParagraphFormat().setDepth((short)2);
para2.getParagraphFormat().setIndent(40);
// Получите третий абзац в TextFrame и установите его отступ
IParagraph para3 = tf.getParagraphs().get_Item(2);
para3.getParagraphFormat().getBullet().setType(BulletType.Symbol);
para3.getParagraphFormat().getBullet().setChar((char)8226);
para3.getParagraphFormat().setAlignment(TextAlignment.Left);
para3.getParagraphFormat().setDepth((short)2);
para3.getParagraphFormat().setIndent(50);
// Сохраните презентацию на диск
pres.save("InOutDent_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Установить висячий отступ для абзаца
Этот Java‑код демонстрирует, как установить висячий отступ для абзаца:
Presentation pres = new Presentation();
try {
IAutoShape autoShape = pres.getSlides().get_Item(0).getShapes().addAutoShape(ShapeType.Rectangle, 50, 250, 550, 150);
Paragraph para1 = new Paragraph();
para1.setText("Example");
Paragraph para2 = new Paragraph();
para2.setText("Set Hanging Indent for Paragraph");
Paragraph para3 = new Paragraph();
para3.setText("This code shows you how to set the hanging indent for a paragraph: ");
para2.getParagraphFormat().setMarginLeft(10f);
para3.getParagraphFormat().setMarginLeft(20f);
autoShape.getTextFrame().getParagraphs().add(para1);
autoShape.getTextFrame().getParagraphs().add(para2);
autoShape.getTextFrame().getParagraphs().add(para3);
pres.save("pres.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Управление свойствами End в абзаце
- Создайте экземпляр Presentation класса.
- Получите ссылку на слайд, содержащий абзац, по его позиции.
- Добавьте прямоугольный autoshape к слайду.
- Добавьте TextFrame с двумя абзацами к прямоугольнику.
- Установите
FontHeightи тип шрифта для абзацев. - Установите свойства End для абзацев.
- Сохраните изменённую презентацию в файл PPTX.
Этот Java‑код демонстрирует, как установить свойства End для абзацев в PowerPoint:
Presentation pres = new Presentation();
try {
IAutoShape shape = pres.getSlides().get_Item(0).getShapes().addAutoShape(ShapeType.Rectangle, 10, 10, 200, 250);
Paragraph para1 = new Paragraph();
para1.getPortions().add(new Portion("Sample text"));
Paragraph para2 = new Paragraph();
para2.getPortions().add(new Portion("Sample text 2"));
PortionFormat portionFormat = new PortionFormat();
portionFormat.setFontHeight(48);
portionFormat.setLatinFont(new FontData("Times New Roman"));
para2.setEndParagraphPortionFormat(portionFormat);
shape.getTextFrame().getParagraphs().add(para1);
shape.getTextFrame().getParagraphs().add(para2);
pres.save(resourcesOutputPath+"pres.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Импорт HTML‑текста в абзацы
Aspose.Slides предоставляет расширенную поддержку импорта HTML‑текста в абзацы.
- Создайте экземпляр класса Presentation.
- Получите ссылку на нужный слайд по его индексу.
- Добавьте autoshape на слайд.
- Добавьте и получите доступ к ITextFrame автoshape.
- Удалите абзац по умолчанию в
ITextFrame. - Прочитайте исходный HTML‑файл с помощью TextReader.
- Создайте первый экземпляр абзаца через класс Paragraph.
- Добавьте содержимое HTML‑файла, прочитанного TextReader, в ParagraphCollection TextFrame.
- Сохраните изменённую презентацию.
Этот Java‑код реализует шаги по импорту HTML‑текстов в абзацы:
// Создать пустой экземпляр презентации
Presentation pres = new Presentation();
try {
// Получить первый слайд презентации по умолчанию
ISlide slide = pres.getSlides().get_Item(0);
// Добавление AutoShape для размещения HTML‑контента
IAutoShape ashape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 10,
(float)pres.getSlideSize().getSize().getWidth() - 20, (float)pres.getSlideSize().getSize().getHeight() - 10);
ashape.getFillFormat().setFillType(FillType.NoFill);
// Добавление текстового фрейма к фигуре
ashape.addTextFrame("");
// Очистка всех абзацев в добавленном текстовом фрейме
ashape.getTextFrame().getParagraphs().clear();
// Загрузка HTML‑файла с помощью StreamReader
TextReader tr = new StreamReader("file.html");
// Добавление текста из HTML‑потока в текстовый фрейм
ashape.getTextFrame().getParagraphs().addFromHtml(tr.readToEnd());
// Сохранение презентации
pres.save("output_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Экспорт текста абзаца в HTML
Aspose.Slides предоставляет расширенную поддержку экспорта текстов (содержащихся в абзацах) в HTML.
- Создайте экземпляр класса Presentation и загрузите нужную презентацию.
- Получите ссылку на нужный слайд по его индексу.
- Получите форму, содержащую текст, который будет экспортирован в HTML.
- Получите TextFrame формы.
- Создайте экземпляр
StreamWriterи добавьте новый HTML‑файл. - Укажите начальный индекс для StreamWriter и экспортируйте выбранные абзацы.
Этот Java‑код демонстрирует, как экспортировать тексты абзацев PowerPoint в HTML:
// Загрузить файл презентации
Presentation pres = new Presentation("ExportingHTMLText.pptx");
try {
// Получить первый слайд презентации по умолчанию
ISlide slide = pres.getSlides().get_Item(0);
// Требуемый индекс
int index = 0;
// Доступ к добавленной фигуре
IAutoShape ashape = (IAutoShape) slide.getShapes().get_Item(index);
// Создание выходного HTML‑файла
OutputStream os = new FileOutputStream("output.html");
Writer writer = new OutputStreamWriter(os, "UTF-8");
//Извлечение первого абзаца в формате HTML
// Запись данных абзацев в HTML, указывая начальный индекс абзаца и количество копируемых абзацев
writer.write(ashape.getTextFrame().getParagraphs().exportToHtml(0, ashape.getTextFrame().getParagraphs().getCount(), null));
writer.close();
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
Сохранить абзац как изображение
В этом разделе мы рассмотрим два примера, демонстрирующие, как сохранить текстовый абзац, представленный интерфейсом IParagraph, в виде изображения. Оба примера включают получение изображения формы, содержащей абзац, с помощью методов getImage из интерфейса IShape, вычисление границ абзаца внутри формы и экспорт его как растрового изображения. Эти подходы позволяют извлекать отдельные части текста из презентаций PowerPoint и сохранять их как отдельные изображения, что может быть полезно в различных сценариях.
Предположим, что у нас есть файл презентации sample.pptx с одним слайдом, где первая форма — текстовое поле, содержащее три абзаца.

Example 1
В этом примере мы получаем второй абзац в виде изображения. Для этого извлекаем изображение формы с первого слайда презентации, затем вычисляем границы второго абзаца в текстовом фрейме формы. Абзац затем перерисовывается на новое растровое изображение, которое сохраняется в формате PNG. Этот метод особенно полезен, когда нужно сохранить конкретный абзац как отдельное изображение, сохранив точные размеры и форматирование текста.
Presentation presentation = new Presentation("sample.pptx");
try {
IAutoShape firstShape = (IAutoShape) presentation.getSlides().get_Item(0).getShapes().get_Item(0);
// Сохранить форму в памяти в виде растрового изображения.
IImage shapeImage = firstShape.getImage();
ByteArrayOutputStream shapeImageStream = new ByteArrayOutputStream();
shapeImage.save(shapeImageStream, ImageFormat.Png);
shapeImage.dispose();
// Создать растровое изображение формы из памяти.
InputStream shapeImageInputStream = new ByteArrayInputStream(shapeImageStream.toByteArray());
BufferedImage shapeBitmap = ImageIO.read(shapeImageInputStream);
// Вычислить границы второго абзаца.
IParagraph secondParagraph = firstShape.getTextFrame().getParagraphs().get_Item(1);
Rectangle2D paragraphRectangle = secondParagraph.getRect();
// Вычислить координаты и размер выходного изображения (минимальный размер — 1x1 пиксель).
int imageX = (int) Math.floor(paragraphRectangle.getX());
int imageY = (int) Math.floor(paragraphRectangle.getY());
int imageWidth = Math.max(1, (int) Math.ceil(paragraphRectangle.getWidth()));
int imageHeight = Math.max(1, (int) Math.ceil(paragraphRectangle.getHeight()));
// Обрезать растровое изображение формы, чтобы получить только растровое изображение абзаца.
BufferedImage paragraphBitmap = shapeBitmap.getSubimage(imageX, imageY, imageWidth, imageHeight);
ImageIO.write(paragraphBitmap, "png", new File("paragraph.png"));
} catch (IOException e) {
} finally {
if (presentation != null) presentation.dispose();
}
Результат:

Example 2
В этом примере мы расширяем предыдущий подход, добавляя коэффициенты масштабирования к изображению абзаца. Форма извлекается из презентации и сохраняется как изображение с коэффициентом масштабирования 2. Это позволяет получить изображение более высокого разрешения при экспорте абзаца. Затем границы абзаца вычисляются с учётом масштаба. Масштабирование может быть особенно полезно, когда требуется более детализированное изображение, например, для использования в печатных материалах высокого качества.
float imageScaleX = 2f;
float imageScaleY = imageScaleX;
Presentation presentation = new Presentation("sample.pptx");
try {
IAutoShape firstShape = (IAutoShape) presentation.getSlides().get_Item(0).getShapes().get_Item(0);
// Сохранить форму в памяти в виде растрового изображения с масштабированием.
IImage shapeImage = firstShape.getImage(ShapeThumbnailBounds.Shape, imageScaleX, imageScaleY);
ByteArrayOutputStream shapeImageStream = new ByteArrayOutputStream();
shapeImage.save(shapeImageStream, ImageFormat.Png);
shapeImage.dispose();
// Создать растровое изображение формы из памяти.
InputStream shapeImageInputStream = new ByteArrayInputStream(shapeImageStream.toByteArray());
BufferedImage shapeBitmap = ImageIO.read(shapeImageInputStream);
// Вычислить границы второго абзаца.
IParagraph secondParagraph = firstShape.getTextFrame().getParagraphs().get_Item(1);
Rectangle2D paragraphRectangle = secondParagraph.getRect();
paragraphRectangle.setRect(
paragraphRectangle.getX() * imageScaleX,
paragraphRectangle.getY() * imageScaleY,
paragraphRectangle.getWidth() * imageScaleX,
paragraphRectangle.getHeight() * imageScaleY
);
// Вычислить координаты и размер выходного изображения (минимальный размер — 1x1 пиксель).
int imageX = (int) Math.floor(paragraphRectangle.getX());
int imageY = (int) Math.floor(paragraphRectangle.getY());
int imageWidth = Math.max(1, (int) Math.ceil(paragraphRectangle.getWidth()));
int imageHeight = Math.max(1, (int) Math.ceil(paragraphRectangle.getHeight()));
// Обрезать растровое изображение формы, чтобы получить только растровое изображение абзаца.
BufferedImage paragraphBitmap = shapeBitmap.getSubimage(imageX, imageY, imageWidth, imageHeight);
ImageIO.write(paragraphBitmap, "png", new File("paragraph.png"));
} catch (IOException e) {
} finally {
if (presentation != null) presentation.dispose();
}
FAQ
Могу ли я полностью отключить перенос строк внутри текстового фрейма?
Да. Используйте настройку переноса текста у текстового фрейма (setWrapText), чтобы отключить перенос, и строки не будут разрываться у краёв фрейма.
Как получить точные границы конкретного абзаца на слайде?
Можно получить ограничивающий прямоугольник абзаца (и даже отдельного фрагмента), чтобы знать его точное положение и размер на слайде.
Где управляется выравнивание абзаца (влево/вправо/по центру/по ширине)?
Alignment — это настройка уровня абзаца в ParagraphFormat; она применяется ко всему абзацу независимо от форматирования отдельных фрагментов.
Могу ли я установить язык проверки орфографии только для части абзаца (например, одного слова)?
Да. Язык задаётся на уровне фрагмента (PortionFormat.setLanguageId), поэтому в одном абзаце могут сосуществовать несколько языков.