Улучшите свои презентации с AutoFit в .NET
Обзор
По умолчанию, когда вы добавляете текстовое поле, Microsoft PowerPoint использует параметр Resize shape to fit text для текстового поля — он автоматически изменяет размер поля, чтобы текст всегда помещался в нём.

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

Aspose.Slides for .NET предоставляет аналогичные опции — свойства класса TextFrameFormat — которые позволяют контролировать поведение автоподгонки для текстовых полей в презентациях.
Resize a Shape to Fit Text
Если вы хотите, чтобы текст в поле всегда помещался в это поле после изменений текста, необходимо использовать опцию Resize shape to fit text. Чтобы задать эту настройку, установите свойство AutofitType класса TextFrameFormat в значение Shape.

using (Presentation presentation = new Presentation())
{
ISlide slide = presentation.Slides[0];
IAutoShape autoShape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 30, 30, 350, 100);
Portion portion = new Portion("lorem ipsum...");
portion.PortionFormat.FillFormat.SolidFillColor.Color = Color.Black;
portion.PortionFormat.FillFormat.FillType = FillType.Solid;
autoShape.TextFrame.Paragraphs[0].Portions.Add(portion);
ITextFrameFormat textFrameFormat = autoShape.TextFrame.TextFrameFormat;
textFrameFormat.AutofitType = TextAutofitType.Shape;
presentation.Save("output_presentation.pptx", SaveFormat.Pptx);
}
Если текст становится длиннее или крупнее, текстовое поле будет автоматически изменено (увеличена высота), чтобы весь текст помещался в нём. Если текст становится короче, произойдёт обратное действие.
Do Not Autofit
Если вы хотите, чтобы текстовое поле или фигура сохраняла свои размеры независимо от изменений текста, необходимо использовать опцию Do not Autofit. Чтобы задать эту настройку, установите свойство AutofitType класса TextFrameFormat в значение None.

using (Presentation presentation = new Presentation())
{
ISlide slide = presentation.Slides[0];
IAutoShape autoShape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 30, 30, 350, 100);
Portion portion = new Portion("lorem ipsum...");
portion.PortionFormat.FillFormat.SolidFillColor.Color = Color.Black;
portion.PortionFormat.FillFormat.FillType = FillType.Solid;
autoShape.TextFrame.Paragraphs[0].Portions.Add(portion);
ITextFrameFormat textFrameFormat = autoShape.TextFrame.TextFrameFormat;
textFrameFormat.AutofitType = TextAutofitType.None;
presentation.Save("output_presentation.pptx", SaveFormat.Pptx);
}
Когда текст становится слишком длинным для своего поля, он выходит за его границы.
Shrink Text on Overflow
Если текст становится слишком длинным для своего поля, с помощью опции Shrink text on overflow можно указать, что размер и межбуквенное расстояние текста должны быть уменьшены, чтобы он поместился в поле. Чтобы задать эту настройку, установите свойство AutofitType класса TextFrameFormat в значение Normal.

using (Presentation presentation = new Presentation())
{
ISlide slide = presentation.Slides[0];
IAutoShape autoShape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 30, 30, 350, 100);
Portion portion = new Portion("lorem ipsum...");
portion.PortionFormat.FillFormat.SolidFillColor.Color = Color.Black;
portion.PortionFormat.FillFormat.FillType = FillType.Solid;
autoShape.TextFrame.Paragraphs[0].Portions.Add(portion);
ITextFrameFormat textFrameFormat = autoShape.TextFrame.TextFrameFormat;
textFrameFormat.AutofitType = TextAutofitType.Normal;
presentation.Save("output_presentation.pptx", SaveFormat.Pptx);
}
Info
При использовании опции Shrink text on overflow настройка применяется только тогда, когда текст становится слишком длинным для своего поля.Wrap Text
Если вы хотите, чтобы текст внутри фигуры автоматически переносился внутри этой фигуры, когда текст выходит за её границу (только по ширине), используйте параметр Wrap text in shape. Чтобы задать эту настройку, установите свойство WrapText класса TextFrameFormat в значение NullableBool.True.
using (Presentation presentation = new Presentation())
{
ISlide slide = presentation.Slides[0];
IAutoShape autoShape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 30, 30, 350, 100);
Portion portion = new Portion("lorem ipsum...");
portion.PortionFormat.FillFormat.SolidFillColor.Color = Color.Black;
portion.PortionFormat.FillFormat.FillType = FillType.Solid;
autoShape.TextFrame.Paragraphs[0].Portions.Add(portion);
ITextFrameFormat textFrameFormat = autoShape.TextFrame.TextFrameFormat;
textFrameFormat.WrapText = NullableBool.True;
presentation.Save("output_presentation.pptx", SaveFormat.Pptx);
}
Note
Если установить свойствоWrapText в NullableBool.False для фигуры, когда текст внутри фигуры становится длиннее её ширины, текст будет выходить за границы фигуры в одну строку.
FAQ
Влияют ли внутренние отступы текстового фрейма на автоподгонку?
Да. Отступы (внутренние поля) уменьшают доступную площадь для текста, поэтому автоподгонка срабатывает раньше — уменьшая шрифт или размер фигуры быстрее. Проверьте и отрегулируйте отступы перед настройкой автоподгонки.
Как автоподгонка взаимодействует с ручными и мягкими разрывами строк?
Принудительные разрывы остаются на месте, а автоподгонка регулирует размер шрифта и межстрочное расстояние вокруг них. Удаление лишних разрывов часто уменьшает степень, с которой автоподгонка должна сжимать текст.
Влияет ли изменение шрифта темы или подстановка шрифта на результаты автоподгонки?
Да. Замена шрифта на другой с другими метриками глифов меняет ширину/высоту текста, что может изменить конечный размер шрифта и перенос строк. После любой смены шрифта или подстановки проверьте слайды заново.