Повышайте качество презентаций с AutoFit в PHP
По умолчанию, когда вы добавляете текстовое поле, Microsoft PowerPoint использует параметр Изменить размер фигуры, чтобы зафиксировать текст для этого поля — он автоматически изменяет размер текстового поля, чтобы его текст всегда помещался в нём.

- Когда текст в текстовом поле становится длиннее или больше, PowerPoint автоматически увеличивает высоту текстового поля, чтобы оно могло вместить больше текста.
- Когда текст в текстовом поле становится короче или меньше, PowerPoint автоматически уменьшает высоту текстового поля, удаляя лишнее пространство.
В PowerPoint существуют 4 важных параметра или опции, управляющих поведением автоподгонки для текстового поля:
- Do not Autofit
- Shrink text on overflow
- Resize shape to fit text
- Wrap text in shape.

Aspose.Slides for PHP via Java предоставляет аналогичные параметры — некоторые свойства класса TextFrameFormat, позволяющие управлять поведением автоподгонки для текстовых полей в презентациях.
Изменить размер фигуры, чтобы соответствовать тексту
Если вы хотите, чтобы текст в рамке всегда помещался в рамку после изменения текста, необходимо использовать параметр Resize shape to fix text. Чтобы задать этот параметр, установите свойство AutofitType (из класса TextFrameFormat) в Shape.

Этот PHP‑код показывает, как указать, что текст всегда должен помещаться в свою рамку в презентации PowerPoint:
$pres = new Presentation();
try {
$slide = $pres->getSlides()->get_Item(0);
$autoShape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 30, 30, 350, 100);
$portion = new Portion("lorem ipsum...");
$portion->getPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLACK);
$portion->getPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
$autoShape->getTextFrame()->getParagraphs()->get_Item(0)->getPortions()->add($portion);
$textFrameFormat = $autoShape->getTextFrame()->getTextFrameFormat();
$textFrameFormat::setAutofitType(TextAutofitType::Shape);
$pres->save("Output-presentation.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Если текст становится длиннее или больше, текстовое поле будет автоматически изменено (увеличена высота), чтобы весь текст поместился. Если текст становится короче, произойдёт обратное действие.
Do Not Autofit
Если вы хотите, чтобы текстовое поле или фигура сохраняли свои размеры независимо от изменений текста, необходимо использовать параметр Do not Autofit. Чтобы задать этот параметр, установите свойство AutofitType (из класса TextFrameFormat) в None.

Этот PHP‑код показывает, как указать, что текстовое поле всегда должно сохранять свои размеры в презентации PowerPoint:
$pres = new Presentation();
try {
$slide = $pres->getSlides()->get_Item(0);
$autoShape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 30, 30, 350, 100);
$portion = new Portion("lorem ipsum...");
$portion->getPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLACK);
$portion->getPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
$autoShape->getTextFrame()->getParagraphs()->get_Item(0)->getPortions()->add($portion);
$textFrameFormat = $autoShape->getTextFrame()->getTextFrameFormat();
$textFrameFormat::setAutofitType(TextAutofitType::None);
$pres->save("Output-presentation.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Когда текст становится слишком длинным для своей рамки, он выходит за её пределы.
Shrink Text on Overflow
Если текст становится слишком длинным для своей рамки, с помощью параметра Shrink text on overflow можно задать уменьшение размера и межбуквенного интервала текста, чтобы он уместился в рамке. Чтобы задать этот параметр, установите свойство AutofitType (из класса TextFrameFormat) в Normal.

Этот PHP‑код показывает, как указать, что текст должен уменьшаться при переполнении в презентации PowerPoint:
$pres = new Presentation();
try {
$slide = $pres->getSlides()->get_Item(0);
$autoShape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 30, 30, 350, 100);
$portion = new Portion("lorem ipsum...");
$portion->getPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLACK);
$portion->getPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
$autoShape->getTextFrame()->getParagraphs()->get_Item(0)->getPortions()->add($portion);
$textFrameFormat = $autoShape->getTextFrame()->getTextFrameFormat();
$textFrameFormat::setAutofitType(TextAutofitType::Normal);
$pres->save("Output-presentation.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Info
При использовании параметра Shrink text on overflow настройка применяется только тогда, когда текст становится слишком длинным для своей рамки.Wrap Text
Если вы хотите, чтобы текст в фигуре переносился внутри этой фигуры, когда текст превышает её границу (только по ширине), используйте параметр Wrap text in shape. Чтобы задать эту настройку, установите свойство WrapText (из класса TextFrameFormat) в true.
Этот PHP‑код показывает, как использовать параметр Wrap Text в презентации PowerPoint:
$pres = new Presentation();
try {
$slide = $pres->getSlides()->get_Item(0);
$autoShape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 30, 30, 350, 100);
$portion = new Portion("lorem ipsum...");
$portion->getPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLACK);
$portion->getPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
$autoShape->getTextFrame()->getParagraphs()->get_Item(0)->getPortions()->add($portion);
$textFrameFormat = $autoShape->getTextFrame()->getTextFrameFormat();
$textFrameFormat::setWrapText(NullableBool::True);
$pres->save("Output-presentation.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Note
Если установить свойствоWrapText в False для фигуры, когда текст внутри фигуры становится шире её границы, текст будет вытягиваться за пределы фигуры в одну строку.
FAQ
Влияют ли внутренние отступы рамки текста на AutoFit?
Да. Внутренние отступы уменьшают доступную площадь для текста, поэтому AutoFit срабатывает раньше — шрифт уменьшается или фигура изменяется быстрее. Проверьте и настройте отступы перед настройкой AutoFit.
Как AutoFit взаимодействует с ручными и мягкими разрывами строк?
Принудительные разрывы остаются на месте, а AutoFit подбирает размер шрифта и интервалы вокруг них. Удаление ненужных разрывов часто уменьшает необходимость сильного сжатия текста.
Влияют ли изменение темы шрифта или подстановка шрифта на результаты AutoFit?
Да. Подстановка шрифта с другими метрическими характеристиками меняет ширину/высоту текста, что может изменить конечный размер шрифта и перенос строк. После любой замены шрифта повторно проверьте слайды.