Форматирование текста презентации на Android
Обзор
В этой статье показано, как форматировать текст в презентациях PowerPoint и OpenDocument с помощью Aspose.Slides для Android через Java. Охватываются фоновые цвета, прозрачность, интервал между символами, свойства шрифта, вращение, интервал между абзацами, поведение автоподгонки, привязка текста, табуляторы и параметры языка.
Если не указано иначе, примеры используют sample.pptx. Первая фигура на первом слайде — это текстовое поле, а его первый абзац содержит текст, показанный ниже. Номера слайдов и фигур нумеруются с нуля. Примеры, выделяющие жирные части, используют эффективное форматирование, включая унаследованное жирное форматирование:

Чтобы найти и выделить дословный текст или совпадения по регулярному выражению, см. Search and Replace Text.
Установить цвет фона текста
Используйте IParagraphFormat.getDefaultPortionFormat для задания цвета подсветки по умолчанию для абзаца или IBasePortionFormat.getHighlightColor для отдельных частей текста.
Следующий пример задаёт светло-серую подсветку по умолчанию для первого абзаца. Явные цвета подсветки у отдельных частей текста имеют приоритет над этим значением по умолчанию:
import com.aspose.slides.*;
import android.graphics.Color;
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape autoShape = (IAutoShape)slide.getShapes().get_Item(0);
IParagraph paragraph = autoShape.getTextFrame().getParagraphs().get_Item(0);
// Установить цвет подсветки для всего абзаца.
paragraph.getParagraphFormat().getDefaultPortionFormat().getHighlightColor().setColor(Color.LTGRAY);
presentation.save("gray_paragraph.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Результат:

Ниже показан пример кода, демонстрирующий, как установить цвет фона для текстовых частей с полужирным шрифтом:
import com.aspose.slides.*;
import android.graphics.Color;
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape autoShape = (IAutoShape)slide.getShapes().get_Item(0);
IParagraph paragraph = autoShape.getTextFrame().getParagraphs().get_Item(0);
for (IPortion portion : paragraph.getPortions()) {
if (portion.getPortionFormat().getEffective().getFontBold()) {
// Установить цвет подсветки для текстовой части.
portion.getPortionFormat().getHighlightColor().setColor(Color.LTGRAY);
}
}
presentation.save("gray_text_portions.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Результат:

Выравнивание текстовых абзацев
Используйте IParagraphFormat.setAlignment для установки выравнивания абзаца внутри текстовой рамки. Значение может быть центрированным, выровненным по левому краю, по правому, по ширине и т.д.
Следующий пример кода показывает, как выравнять абзац по центру:
import com.aspose.slides.*;
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape autoShape = (IAutoShape)slide.getShapes().get_Item(0);
IParagraph paragraph = autoShape.getTextFrame().getParagraphs().get_Item(0);
// Установить выравнивание абзаца по центру.
paragraph.getParagraphFormat().setAlignment(TextAlignment.Center);
presentation.save("aligned_paragraph.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Результат:

Выравнивание шрифтов внутри строки
Используйте IParagraphFormat.setFontAlignment для вертикального выравнивания текстовых частей разных размеров шрифта в одной строке. Эта настройка применяется ко всему абзацу и контролирует выравнивание внутри каждой его строки.
Следующий автономный пример создаёт четыре помеченных текстовых поля на одном слайде. Каждый абзац содержит один и тот же текст размером 18, 36 и 54 пункта с разным выравниванием шрифта. Он использует Arial, отключает автоподгонку и перенос, и делает текстовые рамки достаточно большими для одной строки.
import com.aspose.slides.*;
import android.graphics.Color;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
int[] alignments = { FontAlignment.Baseline, FontAlignment.Top, FontAlignment.Center, FontAlignment.Bottom };
String[] alignmentNames = { "Baseline", "Top", "Center", "Bottom" };
float[] fontSizes = { 18f, 36f, 54f };
for (int i = 0; i < alignments.length; i++) {
IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 30, 20 + i * 130, 660, 120);
shape.getFillFormat().setFillType(FillType.NoFill);
shape.getLineFormat().getFillFormat().setFillType(FillType.NoFill);
ITextFrame textFrame = shape.getTextFrame();
textFrame.getTextFrameFormat().setAnchoringType(TextAnchorType.Top);
textFrame.getTextFrameFormat().setAutofitType(TextAutofitType.None);
textFrame.getTextFrameFormat().setWrapText(NullableBool.False);
IParagraph label = textFrame.getParagraphs().get_Item(0);
label.setText(alignmentNames[i]);
label.getParagraphFormat().setAlignment(TextAlignment.Left);
label.getParagraphFormat().getDefaultPortionFormat().setFontHeight(14);
label.getParagraphFormat().getDefaultPortionFormat().setLatinFont(new FontData("Arial"));
label.getParagraphFormat().getDefaultPortionFormat().getFillFormat().setFillType(FillType.Solid);
label.getParagraphFormat().getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.GRAY);
Paragraph paragraph = new Paragraph();
paragraph.getParagraphFormat().setFontAlignment(alignments[i]);
paragraph.getParagraphFormat().setAlignment(TextAlignment.Left);
paragraph.getParagraphFormat().getDefaultPortionFormat().setLatinFont(new FontData("Arial"));
paragraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().setFillType(FillType.Solid);
paragraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
for (float fontSize : fontSizes) {
Portion portion = new Portion("Ag ");
portion.getPortionFormat().setFontHeight(fontSize);
paragraph.getPortions().add(portion);
}
textFrame.getParagraphs().add(paragraph);
}
presentation.save("font_alignment.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Результат:

Выравнивание шрифта использует метрики шрифта, поэтому видимые края отдельных букв не всегда точно совпадают. Пример включает заглавную букву и нисходящий элемент, чтобы показать разницу между базовой линией и нижним выравниванием. Доступность шрифтов и их подстановка, используемые символы и разница в размерах шрифта влияют на результат. Размеры рамки, поля, межстрочный интервал, перенос и автоподгонка также влияют на расположение; используйте одинаковые шрифты и настройки макета при сравнении режимов.
Эта настройка отличается от IParagraphFormat.setAlignment, который управляет горизонтальным выравниванием абзаца, а также от ITextFrameFormat.setAnchoringType, который позиционирует текстовый блок вертикально внутри фигуры. Форматирование надстрочного и подстрочного текста через IBasePortionFormat.setEscapement смещает отдельные части относительно базовой линии вместо установки выравнивания шрифта для строк абзаца.
Установить прозрачность текста
Прозрачность текста контролируется альфа‑компонентой цвета, заданного для IBasePortionFormat.getFillFormat. В нижеприведённых примерах alpha = 50 — это значение альфа‑канала ARGB в диапазоне 0–255, а не процент прозрачности.
Ниже показан пример кода, который применяет прозрачность к всему абзацу:
import com.aspose.slides.*;
import android.graphics.Color;
int alpha = 50;
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape autoShape = (IAutoShape)slide.getShapes().get_Item(0);
IParagraph paragraph = autoShape.getTextFrame().getParagraphs().get_Item(0);
// Установить цвет заливки текста в прозрачный цвет.
paragraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().setFillType(FillType.Solid);
paragraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.argb(alpha, 0, 0, 0));
presentation.save("transparent_paragraph.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Результат:

Следующий пример кода показывает, как применить прозрачность к текстовым частям с полужирным шрифтом:
import com.aspose.slides.*;
import android.graphics.Color;
int alpha = 50;
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape autoShape = (IAutoShape)slide.getShapes().get_Item(0);
IParagraph paragraph = autoShape.getTextFrame().getParagraphs().get_Item(0);
for (IPortion portion : paragraph.getPortions()) {
if (portion.getPortionFormat().getEffective().getFontBold()) {
// Установить прозрачность текстовой части.
portion.getPortionFormat().getFillFormat().setFillType(FillType.Solid);
portion.getPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.argb(alpha, 0, 0, 0));
}
}
presentation.save("transparent_text_portions.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Результат:

Установить интервал между символами текста
Используйте IBasePortionFormat.setSpacing для увеличения или уменьшения интервала между символами в текстовом поле. В примерах добавляется интервал в 3 пункта; отрицательные значения сжимают текст.
Следующий код на Java показывает, как расширить интервал между символами в всём абзаце:
import com.aspose.slides.*;
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape autoShape = (IAutoShape)slide.getShapes().get_Item(0);
IParagraph paragraph = autoShape.getTextFrame().getParagraphs().get_Item(0);
// Примечание: используйте отрицательные значения для сжатия интервала между символами.
paragraph.getParagraphFormat().getDefaultPortionFormat().setSpacing(3); // Увеличить интервал между символами.
presentation.save("character_spacing_in_paragraph.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Результат:

Ниже пример кода, демонстрирующий расширение интервала между символами в текстовых частях с полужирным шрифтом:
import com.aspose.slides.*;
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape autoShape = (IAutoShape)slide.getShapes().get_Item(0);
IParagraph paragraph = autoShape.getTextFrame().getParagraphs().get_Item(0);
for (IPortion portion : paragraph.getPortions()) {
if (portion.getPortionFormat().getEffective().getFontBold()) {
// Примечание: используйте отрицательные значения для сжатия интервала между символами.
portion.getPortionFormat().setSpacing(3); // Увеличить интервал между символами.
}
}
presentation.save("character_spacing_in_text_portions.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Результат:

Отключить кернинг для определённых шрифтов
В некоторых случаях текст, отрисованный Aspose.Slides, может выглядеть немного плотнее, чем тот же текст в PowerPoint. Это может происходить, потому что PowerPoint может игнорировать данные кернинга для некоторых шрифтов, даже если в шрифте присутствует корректный кернинг и он включён в настройках PowerPoint.
Чтобы сделать вывод более похожим на PowerPoint, можно отключить кернинг для текстовых частей, использующих проблемный шрифт. Установите IBasePortionFormat.setKerningMinimalSize в значение, превышающее фактический размер шрифта. В этом примере требуется файл “presentation.pptx” с текстовым полем как первой фигурой на первом слайде. Пример проверяет эффективные имена шрифтов, включая унаследованные, и задаёт порог в 100 пунктов для частей, использующих Roboto. Это отключает кернинг для соответствующих частей шрифта размером менее 100 пунктов:
import com.aspose.slides.*;
Presentation presentation = new Presentation("presentation.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape autoShape = (IAutoShape)slide.getShapes().get_Item(0);
String targetFont = "Roboto";
for (IParagraph paragraph : autoShape.getTextFrame().getParagraphs()) {
for (IPortion portion : paragraph.getPortions()) {
IPortionFormatEffectiveData portionFormat = portion.getPortionFormat().getEffective();
if ((portionFormat.getLatinFont() != null &&
portionFormat.getLatinFont().getFontName().equals(targetFont)) ||
(portionFormat.getEastAsianFont() != null &&
portionFormat.getEastAsianFont().getFontName().equals(targetFont)) ||
(portionFormat.getComplexScriptFont() != null &&
portionFormat.getComplexScriptFont().getFontName().equals(targetFont))) {
portion.getPortionFormat().setKerningMinimalSize(100);
}
}
}
presentation.save("output.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Для текста, попадающего под порог, эта настройка предотвращает кернинг и может помочь согласовать рендеринг Aspose.Slides с визуальным выводом PowerPoint для шрифтов, затронутых этим специфическим поведением PowerPoint.
Управление свойствами шрифта текста
Свойства шрифта можно задать на уровне абзаца через IParagraphFormat.getDefaultPortionFormat или для отдельных частей через IPortionFormat.
Следующий пример задаёт для первого абзаца шрифт Times New Roman 12 пунктов с полужирным, курсивом и пунктирным подчёркиванием. Явное форматирование отдельных частей имеет приоритет над этими значениями по умолчанию:
import com.aspose.slides.*;
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape autoShape = (IAutoShape)slide.getShapes().get_Item(0);
IParagraph paragraph = autoShape.getTextFrame().getParagraphs().get_Item(0);
// Установить свойства шрифта для абзаца.
paragraph.getParagraphFormat().getDefaultPortionFormat().setFontHeight(12);
paragraph.getParagraphFormat().getDefaultPortionFormat().setFontBold(NullableBool.True);
paragraph.getParagraphFormat().getDefaultPortionFormat().setFontItalic(NullableBool.True);
paragraph.getParagraphFormat().getDefaultPortionFormat().setFontUnderline(TextUnderlineType.Dotted);
paragraph.getParagraphFormat().getDefaultPortionFormat().setLatinFont(new FontData("Times New Roman"));
presentation.save("font_properties_for_paragraph.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Результат:

Следующий пример применяет к частям шрифт Times New Roman 13 пунктов, курсив и пунктирное подчёркивание, если их эффективное форматирование включает полужирный стиль:
import com.aspose.slides.*;
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape autoShape = (IAutoShape)slide.getShapes().get_Item(0);
IParagraph paragraph = autoShape.getTextFrame().getParagraphs().get_Item(0);
for (IPortion portion : paragraph.getPortions()) {
if (portion.getPortionFormat().getEffective().getFontBold()) {
// Установить свойства шрифта для текстовой части.
portion.getPortionFormat().setFontHeight(13);
portion.getPortionFormat().setFontItalic(NullableBool.True);
portion.getPortionFormat().setFontUnderline(TextUnderlineType.Dotted);
portion.getPortionFormat().setLatinFont(new FontData("Times New Roman"));
}
}
presentation.save("font_properties_for_text_portions.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Результат:

Установить вращение текста
Используйте ITextFrameFormat.setTextVerticalType для задания предопределённой ориентации текста внутри фигуры.
Следующий пример кода задаёт ориентацию текста в фигуре как TextVerticalType.Vertical270, что вращает текст на 90 градусов против часовой стрелки:
import com.aspose.slides.*;
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape autoShape = (IAutoShape)slide.getShapes().get_Item(0);
autoShape.getTextFrame().getTextFrameFormat().setTextVerticalType(TextVerticalType.Vertical270);
presentation.save("text_rotation.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Результат:

Установить пользовательское вращение для текстовых рамок
Используйте ITextFrameFormat.setRotationAngle для задания собственного угла вращения для ITextFrame.
Ниже пример кода, который вращает текстовую рамку на 3 градуса по часовой стрелке внутри фигуры:
import com.aspose.slides.*;
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape autoShape = (IAutoShape)slide.getShapes().get_Item(0);
autoShape.getTextFrame().getTextFrameFormat().setRotationAngle(3);
presentation.save("custom_text_rotation.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Результат:

Установить межстрочный интервал абзацев
Aspose.Slides предоставляет методы IParagraphFormat.setSpaceAfter, IParagraphFormat.setSpaceBefore и IParagraphFormat.setSpaceWithin для управления интервалами абзацев. Они используются следующим образом:
- Положительное значение задаёт межстрочный интервал в процентах от высоты строки.
- Отрицательное значение задаёт межстрочный интервал в пунктах.
Следующий пример задаёт интервал внутри первого абзаца на 200 % от высоты строки (двойной интервал):
import com.aspose.slides.*;
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape autoShape = (IAutoShape)slide.getShapes().get_Item(0);
IParagraph paragraph = autoShape.getTextFrame().getParagraphs().get_Item(0);
paragraph.getParagraphFormat().setSpaceWithin(200);
presentation.save("line_spacing.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Результат:

Управление переносом строк
Правила переноса строк абзаца полезны в узких текстовых блоках и презентациях, где смешивается латинский и восточно‑азиатский текст. Ниже перечислены методы класса IParagraphFormat, которые применяются ко всему абзацу:
- setLatinLineBreak управляет правилами переноса для латиницы. При смешанном тексте его изменение может также влиять на перенос соседнего восточно‑азиатского текста и пунктуации.
- setEastAsianLineBreak управляет правилами переноса для восточно‑азиатского текста, включая ограничения на символы в начале и в конце строки.
Эти правила не заменяют ITextFrameFormat.setWrapText, который включает автоматический перенос внутри текстовой рамки. Они влияют на макет при переносе; они не вставляют символы переноса строки. Явный перенос строки принудительно создаёт новую строку в абзаце независимо от доступной ширины.
Следующий автономный пример создаёт узкий текстовый блок, содержащий китайский и латинский текст. Он явно задаёт оба параметра переноса и сохраняет файл “line_breaking.pptx”. Чтобы поэкспериментировать с каждым правилом, изменяйте соответствующее значение, оставив другое неизменным. В примере используется Arial 24 пункта и SimSun, ширина рамки 160 пунктов и нулевые горизонтальные отступы. ITextFrameFormat.setAutofitType вызывается с TextAutofitType.None, чтобы размер текста и рамки оставались фиксированными.
import com.aspose.slides.*;
import android.graphics.Color;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 50, 50, 160, 300);
shape.getFillFormat().setFillType(FillType.NoFill);
ITextFrame textFrame = shape.getTextFrame();
textFrame.getTextFrameFormat().setWrapText(NullableBool.True);
textFrame.getTextFrameFormat().setAutofitType(TextAutofitType.None);
textFrame.getTextFrameFormat().setMarginLeft(0);
textFrame.getTextFrameFormat().setMarginRight(0);
IParagraph paragraph = textFrame.getParagraphs().get_Item(0);
paragraph.setText("中文排版测试,PowerPoint 中文演示。");
IParagraphFormat format = paragraph.getParagraphFormat();
format.setAlignment(TextAlignment.Left);
format.getDefaultPortionFormat().setFontHeight(24);
FontData latinFont = new FontData("Arial");
format.getDefaultPortionFormat().setLatinFont(latinFont);
FontData eastAsianFont = new FontData("SimSun");
format.getDefaultPortionFormat().setEastAsianFont(eastAsianFont);
format.getDefaultPortionFormat().getFillFormat().setFillType(FillType.Solid);
format.getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
format.setLatinLineBreak(NullableBool.False);
format.setEastAsianLineBreak(NullableBool.True);
presentation.save("line_breaking.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Контроль «виснущей» пунктуации
IParagraphFormat.setHangingPunctuation позволяет допустимым знакам пунктуации выступать за правый край строки вместо того, чтобы занимать следующую строку. Применяется к всему абзацу и отличается от «виснутого» отступа.
Следующий автономный пример включает «виснущую» пунктуацию в текстовой рамке шириной 100 пунктов и сохраняет файл “hanging_punctuation.pptx”. При Arial 24 пункта и нулевых горизонтальных отступах конечная точка остаётся после слова «sentence» и выступает за правый край текста. Установите свойство в NullableBool.False, чтобы сравнить: в этом случае точка занимает отдельную строку. Перенос включён, автоподгонка отключена, чтобы фиксировать доступную ширину.
import com.aspose.slides.*;
import android.graphics.Color;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 50, 50, 100, 200);
shape.getFillFormat().setFillType(FillType.NoFill);
ITextFrame textFrame = shape.getTextFrame();
textFrame.getTextFrameFormat().setWrapText(NullableBool.True);
textFrame.getTextFrameFormat().setAutofitType(TextAutofitType.None);
textFrame.getTextFrameFormat().setMarginLeft(0);
textFrame.getTextFrameFormat().setMarginRight(0);
IParagraph paragraph = textFrame.getParagraphs().get_Item(0);
paragraph.setText("Simple text, next sentence.");
IParagraphFormat format = paragraph.getParagraphFormat();
format.setAlignment(TextAlignment.Left);
format.getDefaultPortionFormat().setFontHeight(24);
FontData latinFont = new FontData("Arial");
format.getDefaultPortionFormat().setLatinFont(latinFont);
format.getDefaultPortionFormat().getFillFormat().setFillType(FillType.Solid);
format.getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
format.setHangingPunctuation(NullableBool.True);
presentation.save("hanging_punctuation.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Не каждый знак пунктуации может «виснуть». На это также влияют условия шрифта и макета, описанные выше: изменение шрифта, доступной ширины, отступов или настроек автоподгонки может убрать видимую разницу.
Установить тип автоподгонки для текстовых рамок
ITextFrameFormat.setAutofitType определяет, как текстbehaviour будет вести себя при превышении границ контейнера. Используйте его, чтобы контролировать, будет ли текст уменьшаться, выходить за пределы или автоматически изменять размер фигуры. Следующий пример конфигурирует фигуру так, чтобы она изменялась в размере под текст, и сохраняет результат в файл “autofit_type.pptx”.
import com.aspose.slides.*;
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape autoShape = (IAutoShape)slide.getShapes().get_Item(0);
autoShape.getTextFrame().getTextFrameFormat().setAutofitType(TextAutofitType.Shape);
presentation.save("autofit_type.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Чтобы подсчитать линии после автоматического переноса и увидеть, как изменение ширины текста или фигуры влияет на результат, см. Count Rendered Lines. Само количество строк не указывает, выходит ли текст за пределы контейнера.
Установить привязку текстовых рамок
ITextFrameFormat.setAnchoringType задаёт вертикальное положение текста внутри фигуры, например, вверху, посередине или внизу. Следующий пример привязывает текст к низу первой фигуры и сохраняет результат в файл “text_anchor.pptx”.
import com.aspose.slides.*;
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape autoShape = (IAutoShape)slide.getShapes().get_Item(0);
autoShape.getTextFrame().getTextFrameFormat().setAnchoringType(TextAnchorType.Bottom);
presentation.save("text_anchor.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Установить табуляцию текста
Используйте IParagraphFormat.setDefaultTabSize и IParagraphFormat.getTabs для конфигурации табуляции в абзаце. Следующий пример задаёт интервал табуляции по умолчанию в 100 пунктов и добавляет табуляцию слева, выровненную по 30 пунктам. Эти настройки влияют на текст, содержащий символы табуляции.
import com.aspose.slides.*;
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape autoShape = (IAutoShape)slide.getShapes().get_Item(0);
IParagraph paragraph = autoShape.getTextFrame().getParagraphs().get_Item(0);
paragraph.getParagraphFormat().setDefaultTabSize(100);
paragraph.getParagraphFormat().getTabs().add(30, TabAlignment.Left);
presentation.save("paragraph_tabs.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Результат:

Установить язык проверки правописания
Aspose.Slides предоставляет IBasePortionFormat.setLanguageId, который позволяет задать язык проверки правописания для части текста. Язык проверки определяет язык, используемый для проверки орфографии и грамматики в PowerPoint.
Следующий пример требует файл “presentation.pptx” с текстовым полем как первой фигурой на первом слайде и хотя бы один абзац. Он заменяет содержимое первого абзаца на «1。», задаёт шрифт SimSun и устанавливает язык проверки Simplified Chinese (zh-CN). Затем сохраняет результат в файл “proofing_language.pptx”:
import com.aspose.slides.*;
Presentation presentation = new Presentation("presentation.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape autoShape = (IAutoShape)slide.getShapes().get_Item(0);
IParagraph paragraph = autoShape.getTextFrame().getParagraphs().get_Item(0);
paragraph.getPortions().clear();
FontData font = new FontData("SimSun");
Portion textPortion = new Portion();
textPortion.getPortionFormat().setComplexScriptFont(font);
textPortion.getPortionFormat().setEastAsianFont(font);
textPortion.getPortionFormat().setLatinFont(font);
// Установить идентификатор проверочного языка.
textPortion.getPortionFormat().setLanguageId("zh-CN");
textPortion.setText("1。");
paragraph.getPortions().add(textPortion);
presentation.save("proofing_language.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Установить язык по умолчанию
Используйте LoadOptions.setDefaultTextLanguage для определения языка текста по умолчанию, создаваемого при загрузке или создании презентации. Следующий пример создает презентацию с американским английским в качестве языка текста по умолчанию, добавляет текстовое поле и выводит en-US для первой части текста.
import com.aspose.slides.*;
LoadOptions loadOptions = new LoadOptions();
loadOptions.setDefaultTextLanguage("en-US");
Presentation presentation = new Presentation(loadOptions);
try {
ISlide slide = presentation.getSlides().get_Item(0);
// Добавить новую прямоугольную форму с текстом.
IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 20, 20, 150, 50);
shape.getTextFrame().setText("Sample text");
// Проверить язык первой части.
IPortion portion = shape.getTextFrame().getParagraphs().get_Item(0).getPortions().get_Item(0);
System.out.println(portion.getPortionFormat().getLanguageId());
} finally {
presentation.dispose();
}
Установить стиль текста по умолчанию
Для применения форматирования текста по умолчанию на уровне презентации используйте IPresentation.getDefaultTextStyle.
Следующий пример задаёт полужирный шрифт 14 пунктов в качестве значения по умолчанию для абзацев верхнего уровня в новой презентации и сохраняет её в файл “default_text_style.pptx”. Текст может наследовать эти значения, если более конкретное форматирование их не переопределит.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
// Получить формат абзаца верхнего уровня.
IParagraphFormat paragraphFormat = presentation.getDefaultTextStyle().getLevel(0);
if (paragraphFormat != null) {
paragraphFormat.getDefaultPortionFormat().setFontHeight(14);
paragraphFormat.getDefaultPortionFormat().setFontBold(NullableBool.True);
}
presentation.save("default_text_style.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Извлечение текста с эффектом «Все заглавные»
В PowerPoint применение эффекта шрифта All Caps делает текст заглавным на слайде, даже если он был введён строчными буквами. При получении такой части текста с помощью Aspose.Slides библиотека возвращает текст точно в том виде, в каком он был введён. Чтобы получить отображаемый текст, проверьте TextCapType и преобразуйте возвращённую строку в верхний регистр, когда значение равно All.
Этот пример требует файл “sample2.pptx” с текстовым полем как первой фигурой на первом слайде. Первое предложение первого абзаца содержит «Hello, Aspose!», к которому применён эффект All Caps, как показано ниже.

Ниже пример кода, демонстрирующий, как извлечь текст с применённым эффектом All Caps:
import com.aspose.slides.*;
Presentation presentation = new Presentation("sample2.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape autoShape = (IAutoShape)slide.getShapes().get_Item(0);
IPortion textPortion = autoShape.getTextFrame().getParagraphs().get_Item(0).getPortions().get_Item(0);
System.out.println("Original text: " + textPortion.getText());
IPortionFormatEffectiveData textFormat = textPortion.getPortionFormat().getEffective();
if (textFormat.getTextCapType() == TextCapType.All) {
String text = textPortion.getText().toUpperCase();
System.out.println("All-Caps effect: " + text);
}
} finally {
presentation.dispose();
}
Вывод:
Original text: Hello, Aspose!
All-Caps effect: HELLO, ASPOSE!
FAQ
Как изменить текст в таблице на слайде?
Для изменения текста в таблице на слайде используйте ITable. Пройдитесь по ячейкам и обновите каждую ячейку через ICell.getTextFrame и форматирование абзацев через IParagraph.getParagraphFormat.
Как применить градиентный цвет к тексту на слайде PowerPoint?
Чтобы применить градиентный цвет к тексту, используйте IBasePortionFormat.getFillFormat. Установите IFillFormat.setFillType в значение FillType.Gradient и настройте градиентные стопы, направление и прозрачность.