Управление текстовыми абзацами PowerPoint в PHP
Aspose.Slides предоставляет все необходимые интерфейсы и классы для работы с текстами, абзацами и частями в PowerPoint.
- 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. - Сохраните изменённую презентацию.
Этот PHP‑код реализует перечисленные шаги по добавлению абзацев, содержащих части:
# Создать экземпляр класса Presentation, представляющего файл PPTX
$pres = new Presentation();
try {
# Получение первого слайда
$slide = $pres->getSlides()->get_Item(0);
# Добавить AutoShape типа Прямоугольник
$ashp = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 50, 150, 300, 150);
# Получить TextFrame автофигуры
$tf = $ashp->getTextFrame();
# Создать абзацы и части с различными форматами текста
$para0 = $tf->getParagraphs()->get_Item(0);
$port01 = new Portion();
$port02 = new Portion();
$para0->getPortions()->add($port01);
$para0->getPortions()->add($port02);
$para1 = new Paragraph();
$tf->getParagraphs()->add($para1);
$port10 = new Portion();
$port11 = new Portion();
$port12 = new Portion();
$para1->getPortions()->add($port10);
$para1->getPortions()->add($port11);
$para1->getPortions()->add($port12);
$para2 = new Paragraph();
$tf->getParagraphs()->add($para2);
$port20 = new Portion();
$port21 = new Portion();
$port22 = new Portion();
$para2->getPortions()->add($port20);
$para2->getPortions()->add($port21);
$para2->getPortions()->add($port22);
for($i = 0; $i < 3; $i++) {
for($j = 0; $j < 3; $j++) {
$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(java("java.awt.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(java("java.awt.Color")->BLUE);
$portion->getPortionFormat()->setFontItalic(NullableBool::True);
$portion->getPortionFormat()->setFontHeight(18);
}
}
}
# Сохранить PPTX на диск
$pres->save("multiParaPort_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Управление маркерами абзацев
Маркированные списки помогают быстро и эффективно организовать и представить информацию. Маркированные абзацы всегда легче читать и понимать.
- Создайте экземпляр класса Presentation.
- Получите ссылку на нужный слайд по его индексу.
- Добавьте autoshape на выбранный слайд.
- Получите TextFrame автокартины.
- Удалите абзац по умолчанию в
TextFrame. - Создайте первый абзац, используя класс Paragraph.
- Установите для абзаца тип маркера
TypeвSymbolи задайте символ маркера. - Установите текст абзаца.
- Установите отступ абзаца для маркера.
- Задайте цвет маркера.
- Задайте высоту маркера.
- Добавьте новый абзац в коллекцию абзацев
TextFrame. - Добавьте второй абзац и повторите процесс, описанный в шагах 7‑13.
- Сохраните презентацию.
Этот PHP‑код показывает, как добавить маркер абзаца:
# Создает экземпляр класса Presentation, представляющего файл PPTX
$pres = new Presentation();
try {
# Получает первый слайд
$slide = $pres->getSlides()->get_Item(0);
# Добавляет и получает автокартику
$aShp = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 200, 200, 400, 200);
# Получает текстовый фрейм автокартиков
$txtFrm = $aShp->getTextFrame();
# Удаляет абзац по умолчанию
$txtFrm->getParagraphs()->removeAt(0);
# Создает абзац
$para = new Paragraph();
# Устанавливает стиль маркера абзаца и символ
$para->getParagraphFormat()->getBullet()->setType(BulletType::Symbol);
$para->getParagraphFormat()->getBullet()->setChar(8226);
# Устанавливает текст абзаца
$para->setText("Welcome to Aspose.Slides");
# Устанавливает отступ маркера
$para->getParagraphFormat()->setIndent(25);
# Устанавливает цвет маркера
$para->getParagraphFormat()->getBullet()->getColor()->setColorType(ColorType::RGB);
$para->getParagraphFormat()->getBullet()->getColor()->setColor(java("java.awt.Color")->BLACK);
$para->getParagraphFormat()->getBullet()->setBulletHardColor(NullableBool::True);// установить IsBulletHardColor в true, чтобы использовать собственный цвет маркера
# Устанавливает высоту маркера
$para->getParagraphFormat()->getBullet()->setHeight(100);
# Добавляет абзац в текстовый фрейм
$txtFrm->getParagraphs()->add($para);
# Создает второй абзац
$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(java("java.awt.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 (!java_is_null($pres)) {
$pres->dispose();
}
}
Управление маркерами‑изображениями
Маркированные списки помогают быстро и эффективно организовать и представить информацию. Абзацы с изображениями легко читать и понимать.
- Создайте экземпляр класса Presentation.
- Получите ссылку на нужный слайд по его индексу.
- Добавьте autoshape на слайд.
- Получите TextFrame автокартины.
- Удалите абзац по умолчанию в
TextFrame. - Создайте первый абзац, используя класс Paragraph.
- Загрузите изображение в IPPImage.
- Установите тип маркера в Picture и задайте изображение.
- Установите текст абзаца.
- Установите отступ абзаца для маркера.
- Задайте цвет маркера.
- Задайте высоту маркера.
- Добавьте новый абзац в коллекцию абзацев
TextFrame. - Добавьте второй абзац и повторите процесс, описанный в предыдущих шагах.
- Сохраните изменённую презентацию.
Этот PHP‑код показывает, как добавить и управлять маркерами‑изображениями:
# Создает экземпляр класса Presentation, представляющего файл PPTX
$presentation = new Presentation();
try {
# Получает первый слайд
$slide = $presentation->getSlides()->get_Item(0);
# Создает изображение для маркеров
$picture;
$image = Images->fromFile("bullets.png");
try {
$picture = $presentation->getImages()->addImage($image);
} finally {
if (!java_is_null($image)) {
$image->dispose();
}
}
# Добавляет и получает автокартику
$autoShape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 200, 200, 400, 200);
# Получает текстовый фрейм автокартины
$textFrame = $autoShape->getTextFrame();
# Удаляет абзац по умолчанию
$textFrame->getParagraphs()->removeAt(0);
# Создает новый абзац
$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 (JavaException $e) {
} finally {
if (!java_is_null($presentation)) {
$presentation->dispose();
}
}
Управление многоуровневыми маркерами
Маркированные списки помогают быстро и эффективно организовать и представить информацию. Многоуровневые маркеры легко читать и понимать.
- Создайте экземпляр класса Presentation.
- Получите ссылку на нужный слайд по его индексу.
- Добавьте autoshape на новый слайд.
- Получите TextFrame автокартины.
- Удалите абзац по умолчанию в
TextFrame. - Создайте первый абзац через класс Paragraph и задайте глубину 0.
- Создайте второй абзац через класс
Paragraphи задайте глубину 1. - Создайте третий абзац через класс
Paragraphи задайте глубину 2. - Создайте четвёртый абзац через класс
Paragraphи задайте глубину 3. - Добавьте новые абзацы в коллекцию абзацев
TextFrame. - Сохраните изменённую презентацию.
Этот PHP‑код показывает, как добавить и управлять многоуровневыми маркерами:
# Создает экземпляр класса Presentation, представляющего файл PPTX
$pres = new Presentation();
try {
# Получает первый слайд
$slide = $pres->getSlides()->get_Item(0);
# Добавляет и получает AutoShape
$aShp = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 200, 200, 400, 200);
# Получает текстовый фрейм созданной AutoShape
$text = $aShp->addTextFrame("");
# Очищает абзац по умолчанию
$text->getParagraphs()->clear();
# Добавляет первый абзац
$para1 = new Paragraph();
$para1->setText("Content");
$para1->getParagraphFormat()->getBullet()->setType(BulletType::Symbol);
$para1->getParagraphFormat()->getBullet()->setChar(8226);
$para1->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
$para1->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLACK);
# Устанавливает уровень маркера
$para1->getParagraphFormat()->setDepth(0);
# Добавляет второй абзац
$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(java("java.awt.Color")->BLACK);
# Устанавливает уровень маркера
$para2->getParagraphFormat()->setDepth(1);
# Добавляет третий абзац
$para3 = new Paragraph();
$para3->setText("Third Level");
$para3->getParagraphFormat()->getBullet()->setType(BulletType::Symbol);
$para3->getParagraphFormat()->getBullet()->setChar(8226);
$para3->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
$para3->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLACK);
# Устанавливает уровень маркера
$para3->getParagraphFormat()->setDepth(2);
# Добавляет четвертый абзац
$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(java("java.awt.Color")->BLACK);
# Устанавливает уровень маркера
$para4->getParagraphFormat()->setDepth(3);
# Добавляет абзацы в коллекцию
$text->getParagraphs()->add($para1);
$text->getParagraphs()->add($para2);
$text->getParagraphs()->add($para3);
$text->getParagraphs()->add($para4);
# Сохраняет презентацию в файл PPTX
$pres->save("MultilevelBullet.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Управление абзацем с пользовательским нумерованным списком
Интерфейс IBulletFormat предоставляет свойство NumberedBulletStartWith и другие, позволяющие управлять абзацами с пользовательской нумерацией или форматированием.
- Создайте экземпляр класса Presentation.
- Получите слайд, содержащий абзац.
- Добавьте autoshape на слайд.
- Получите TextFrame автокартины.
- Удалите абзац по умолчанию в
TextFrame. - Создайте первый абзац через класс Paragraph и задайте NumberedBulletStartWith равным 2.
- Создайте второй абзац через класс
Paragraphи задайтеNumberedBulletStartWithравным 3. - Создайте третий абзац через класс
Paragraphи задайтеNumberedBulletStartWithравным 7. - Добавьте новые абзацы в коллекцию абзацев
TextFrame. - Сохраните изменённую презентацию.
Этот PHP‑код показывает, как добавить и управлять абзацами с пользовательской нумерацией или форматированием:
$presentation = new Presentation();
try {
$shape = $presentation->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Rectangle, 200, 200, 400, 200);
# Получает текстовый фрейм созданной автокартины
$textFrame = $shape->getTextFrame();
# Удаляет существующий абзац по умолчанию
$textFrame->getParagraphs()->removeAt(0);
# Первый список
$paragraph1 = new Paragraph();
$paragraph1->setText("bullet 2");
$paragraph1->getParagraphFormat()->setDepth(4);
$paragraph1->getParagraphFormat()->getBullet()->setNumberedBulletStartWith(2);
$paragraph1->getParagraphFormat()->getBullet()->setType(BulletType::Numbered);
$textFrame->getParagraphs()->add($paragraph1);
$paragraph2 = new Paragraph();
$paragraph2->setText("bullet 3");
$paragraph2->getParagraphFormat()->setDepth(4);
$paragraph2->getParagraphFormat()->getBullet()->setNumberedBulletStartWith(3);
$paragraph2->getParagraphFormat()->getBullet()->setType(BulletType::Numbered);
$textFrame->getParagraphs()->add($paragraph2);
$paragraph5 = new Paragraph();
$paragraph5->setText("bullet 7");
$paragraph5->getParagraphFormat()->setDepth(4);
$paragraph5->getParagraphFormat()->getBullet()->setNumberedBulletStartWith(7);
$paragraph5->getParagraphFormat()->getBullet()->setType(BulletType::Numbered);
$textFrame->getParagraphs()->add($paragraph5);
$presentation->save("SetCustomBulletsNumber-slides.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($presentation)) {
$presentation->dispose();
}
}
Установка отступа абзаца
- Создайте экземпляр класса Presentation.
- Получите ссылку на нужный слайд по его индексу.
- Добавьте прямоугольный autoshape на слайд.
- Добавьте TextFrame с тремя абзацами в прямоугольный автокартины.
- Спрячьте линии прямоугольника.
- Установите отступ для каждого Paragraph через свойство BulletOffset.
- Сохраните изменённую презентацию в файл PPT.
Этот PHP‑код показывает, как установить отступ абзаца:
# Создает экземпляр класса Presentation
$pres = new Presentation();
try {
# Получает первый слайд
$sld = $pres->getSlides()->get_Item(0);
# Добавляет прямоугольную форму
$rect = $sld->getShapes()->addAutoShape(ShapeType::Rectangle, 100, 100, 500, 150);
# Добавляет TextFrame к прямоугольнику
$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 и задает его отступ
$para1 = $tf->getParagraphs()->get_Item(0);
# Установка стиля маркера абзаца и символа
$para1->getParagraphFormat()->getBullet()->setType(BulletType::Symbol);
$para1->getParagraphFormat()->getBullet()->setChar(8226);
$para1->getParagraphFormat()->setAlignment(TextAlignment->Left);
$para1->getParagraphFormat()->setDepth(2);
$para1->getParagraphFormat()->setIndent(30);
# Получает второй абзац в TextFrame и задает его отступ
$para2 = $tf->getParagraphs()->get_Item(1);
$para2->getParagraphFormat()->getBullet()->setType(BulletType::Symbol);
$para2->getParagraphFormat()->getBullet()->setChar(8226);
$para2->getParagraphFormat()->setAlignment(TextAlignment->Left);
$para2->getParagraphFormat()->setDepth(2);
$para2->getParagraphFormat()->setIndent(40);
# Получает третий абзац в TextFrame и задает его отступ
$para3 = $tf->getParagraphs()->get_Item(2);
$para3->getParagraphFormat()->getBullet()->setType(BulletType::Symbol);
$para3->getParagraphFormat()->getBullet()->setChar(8226);
$para3->getParagraphFormat()->setAlignment(TextAlignment->Left);
$para3->getParagraphFormat()->setDepth(2);
$para3->getParagraphFormat()->setIndent(50);
# Сохраняет презентацию на диск
$pres->save("InOutDent_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Установка висячего отступа для абзаца
Этот PHP‑код показывает, как установить висячий отступ для абзаца:
$pres = new Presentation();
try {
$autoShape = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Rectangle, 50, 250, 550, 150);
$para1 = new Paragraph();
$para1->setText("Example");
$para2 = new Paragraph();
$para2->setText("Set Hanging Indent for Paragraph");
$para3 = new Paragraph();
$para3->setText("This code shows you how to set the hanging indent for a paragraph: ");
$para2->getParagraphFormat()->setMarginLeft(10.0);
$para3->getParagraphFormat()->setMarginLeft(20.0);
$autoShape->getTextFrame()->getParagraphs()->add($para1);
$autoShape->getTextFrame()->getParagraphs()->add($para2);
$autoShape->getTextFrame()->getParagraphs()->add($para3);
$pres->save("pres.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Управление свойствами конечного абзаца (End Run Properties)
- Создайте экземпляр класса Presentation.
- Получите ссылку на слайд, содержащий абзац, по его позиции.
- Добавьте прямоугольный autoshape на слайд.
- Добавьте TextFrame с двумя абзацами в прямоугольник.
- Установите
FontHeightи тип шрифта для абзацев. - Установите свойства End для абзацев.
- Сохраните изменённую презентацию в файл PPTX.
Этот PHP‑код показывает, как установить свойства End для абзацев в PowerPoint:
$pres = new Presentation();
try {
$shape = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 10, 200, 250);
$para1 = new Paragraph();
$para1->getPortions()->add(new Portion("Sample text"));
$para2 = new Paragraph();
$para2->getPortions()->add(new Portion("Sample text 2"));
$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 (!java_is_null($pres)) {
$pres->dispose();
}
}
Импорт HTML‑текста в абзацы
Aspose.Slides предоставляет расширенную поддержку импорта HTML‑текста в абзацы.
- Создайте экземпляр класса Presentation.
- Получите ссылку на нужный слайд по его индексу.
- Добавьте autoshape на слайд.
- Добавьте и получите
autoshapeITextFrame. - Удалите абзац по умолчанию в
ITextFrame. - Прочитайте исходный HTML‑файл с помощью TextReader.
- Создайте первый абзац через класс Paragraph.
- Добавьте содержимое HTML‑файла из TextReader в ParagraphCollection TextFrame.
- Сохраните изменённую презентацию.
Этот PHP‑код реализует шаги по импорту HTML‑текстов в абзацы:
# Создать пустой объект презентации
$pres = new Presentation();
try {
# Доступ к первому слайду презентации по умолчанию
$slide = $pres->getSlides()->get_Item(0);
# Добавление AutoShape для размещения HTML‑контента
$ashape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 10, $pres->getSlideSize()->getSize()->getWidth() - 20, $pres->getSlideSize()->getSize()->getHeight() - 10);
$ashape->getFillFormat()->setFillType(FillType::NoFill);
# Добавление текстового фрейма к фигуре
$ashape->addTextFrame("");
# Очистка всех абзацев в добавленном текстовом фрейме
$ashape->getTextFrame()->getParagraphs()->clear();
# Загрузка HTML‑файла с помощью StreamReader
$tr = new StreamReader("file.html");
# Добавление текста из HTML‑потока в текстовый фрейм
$ashape->getTextFrame()->getParagraphs()->addFromHtml($tr->readToEnd());
# Сохранение презентации
$pres->save("output_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Экспорт текста абзаца в HTML
Aspose.Slides предоставляет расширенную поддержку экспорта текстов (содержащихся в абзацах) в HTML.
- Создайте экземпляр класса Presentation и загрузите нужную презентацию.
- Получите ссылку на нужный слайд по его индексу.
- Получите форму, содержащую текст, который будет экспортирован в HTML.
- Получите TextFrame формы.
- Создайте экземпляр
StreamWriterи добавьте новый HTML‑файл. - Укажите начальный индекс для StreamWriter и экспортируйте выбранные абзацы.
Этот PHP‑код показывает, как экспортировать тексты абзацев PowerPoint в HTML:
# Загрузить файл презентации
$pres = new Presentation("ExportingHTMLText.pptx");
try {
# Доступ к первому слайду презентации по умолчанию
$slide = $pres->getSlides()->get_Item(0);
# Желаемый индекс
$index = 0;
# Доступ к добавленной фигуре
$ashape = $slide->getShapes()->get_Item($index);
# Создание выходного HTML файла
$os = new Java("java.io.FileOutputStream", "output.html");
$writer = new OutputStreamWriter($os, "UTF-8");
# Извлечение первого абзаца в виде HTML
# Запись данных абзацев в HTML, указав начальный индекс абзаца и общее количество копируемых абзацев
$writer->write($ashape->getTextFrame()->getParagraphs()->exportToHtml(0, $ashape->getTextFrame()->getParagraphs()->getCount(), null));
$writer->close();
} catch (JavaException $e) {
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Сохранить абзац как изображение
В этом разделе рассматриваются два примера, демонстрирующие, как сохранить текстовый абзац, представленный классом Paragraph, в виде изображения. Оба примера включают получение изображения формы, содержащей абзац, с помощью методов getImage класса Shape, расчёт границ абзаца внутри формы и экспорт его в виде растрового изображения. Эти подходы позволяют извлекать отдельные части текста из презентаций PowerPoint и сохранять их как отдельные изображения, что может быть полезно в разных сценариях.
Предположим, у нас есть файл презентации sample.pptx с одним слайдом, где первая форма — это текстовое поле, содержащее три абзаца.

Пример 1
В этом примере мы получаем второй абзац в виде изображения. Для этого извлекаем изображение формы с первого слайда презентации, затем рассчитываем границы второго абзаца в текстовом фрейме формы. Абзац перерисовывается на новое растровое изображение, которое сохраняется в формате PNG. Этот метод особенно полезен, когда нужно сохранить конкретный абзац как отдельное изображение, сохранив точные размеры и форматирование текста.
$imageIO = new Java("javax.imageio.ImageIO");
$presentation = new Presentation("sample.pptx");
try {
$firstShape = $presentation->getSlides()->get_Item(0)->getShapes()->get_Item(0);
// Сохранить форму в памяти как растровое изображение.
$shapeImage = $firstShape->getImage();
$shapeImageStream = new Java("java.io.ByteArrayOutputStream");
$shapeImage->save($shapeImageStream, ImageFormat::Png);
$shapeImage->dispose();
// Создать растровое изображение формы из памяти.
$shapeImageInputStream = new Java("java.io.ByteArrayInputStream", $shapeImageStream->toByteArray());
$shapeBitmap = $imageIO->read($shapeImageInputStream);
// Рассчитать границы второго абзаца.
$secondParagraph = $firstShape->getTextFrame()->getParagraphs()->get_Item(1);
$paragraphRectangle = $secondParagraph->getRect();
// Рассчитать координаты и размер выходного изображения (минимальный размер - 1x1 пиксель).
$imageX = floor(java_values($paragraphRectangle->getX()));
$imageY = floor(java_values($paragraphRectangle->getY()));
$imageWidth = max(1, ceil(java_values($paragraphRectangle->getWidth())));
$imageHeight = max(1, ceil(java_values($paragraphRectangle->getHeight())));
// Обрезать растровое изображение формы, чтобы получить только растровое изображение абзаца.
$paragraphBitmap = $shapeBitmap->getSubimage($imageX, $imageY, $imageWidth, $imageHeight);
$imageIO->write($paragraphBitmap, "png", new Java("java.io.File", "paragraph.png"));
} finally {
if (!java_is_null($presentation)) {
$presentation->dispose();
}
}
Результат:

Пример 2
В этом примере мы расширяем предыдущий подход, добавляя коэффициенты масштабирования к изображению абзаца. Форма извлекается из презентации и сохраняется как изображение с коэффициентом масштабирования 2. Это позволяет получить изображение более высокого разрешения при экспорте абзаца. Затем границы абзаца рассчитываются с учётом масштаба. Масштабирование может быть особенно полезным, когда требуется более детальное изображение, например, для печатных материалов высокого качества.
$imageIO = new Java("javax.imageio.ImageIO");
$imageScaleX = 2;
$imageScaleY = $imageScaleX;
$presentation = new Presentation("sample.pptx");
try {
$firstShape = $presentation->getSlides()->get_Item(0)->getShapes()->get_Item(0);
// Сохранить форму в памяти как растровое изображение с масштабированием.
$shapeImage = $firstShape->getImage(ShapeThumbnailBounds::Shape, $imageScaleX, $imageScaleY);
$shapeImageStream = new Java("java.io.ByteArrayOutputStream");
$shapeImage->save($shapeImageStream, ImageFormat::Png);
$shapeImage->dispose();
// Создать растровое изображение формы из памяти.
$shapeImageInputStream = new Java("java.io.ByteArrayInputStream", $shapeImageStream->toByteArray());
$shapeBitmap = $imageIO->read($shapeImageInputStream);
// Рассчитать границы второго абзаца.
$secondParagraph = $firstShape->getTextFrame()->getParagraphs()->get_Item(1);
$paragraphRectangle = $secondParagraph->getRect();
$paragraphRectangle->setRect(
java_values($paragraphRectangle->getX()) * $imageScaleX,
java_values($paragraphRectangle->getY()) * $imageScaleY,
java_values($paragraphRectangle->getWidth()) * $imageScaleX,
java_values($paragraphRectangle->getHeight()) * $imageScaleY
);
// Рассчитать координаты и размер выходного изображения (минимальный размер - 1x1 пиксель).
$imageX = floor(java_values($paragraphRectangle->getX()));
$imageY = floor(java_values($paragraphRectangle->getY()));
$imageWidth = max(1, ceil(java_values($paragraphRectangle->getWidth())));
$imageHeight = max(1, ceil(java_values($paragraphRectangle->getHeight())));
// Обрезать растровое изображение формы, чтобы получить только растровое изображение абзаца.
$paragraphBitmap = $shapeBitmap->getSubimage($imageX, $imageY, $imageWidth, $imageHeight);
$imageIO->write($paragraphBitmap, "png", new Java("java.io.File", "paragraph.png"));
} finally {
if (!java_is_null($presentation)) {
$presentation->dispose();
}
}
FAQ
Могу ли я полностью отключить перенос строк внутри текстового фрейма?
Да. Используйте настройку переноса текста у текстового фрейма (setWrapText), чтобы отключить перенос, тогда строки не будут разбиваться по краям фрейма.
Как получить точные границы конкретного абзаца на слайде?
Можно получить ограничивающий прямоугольник абзаца (и даже отдельной части), чтобы знать его точное положение и размеры на слайде.
Где управляется выравнивание абзаца (left/right/center/justify)?
Alignment — это настройка уровня абзаца в ParagraphFormat; она применяется ко всему абзацу независимо от форматирования отдельных частей.
Можно ли задать язык проверки орфографии только для части абзаца (например, одного слова)?
Да. Язык задаётся на уровне части (PortionFormat.setLanguageId), поэтому в одном абзаце могут сосуществовать несколько языков.