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

Чтобы найти и выделить буквальный текст или совпадения регулярных выражений, см. Поиск и замена текста.
Установить цвет фона текста
Используйте 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();
}
Результат:

Установить прозрачность текста
Прозрачность текста управляется через альфа‑компонент цвета, назначенного 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 для расширения или сжатия интервала между символами в текстовом блоке.
Следующий пример 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 в значение, значительно превышающее фактический размер шрифта:
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()) {
IPortionFormat portionFormat = portion.getPortionFormat();
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))) {
portionFormat.setKerningMinimalSize(100);
}
}
}
presentation.save("output.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Эта настройка предотвращает применение кернинга к соответствующим фрагментам текста и может помочь согласовать рендеринг Aspose.Slides с визуальным отображением PowerPoint для шрифтов, подпадающих под это специфическое поведение PowerPoint.
Управление свойствами шрифта текста
Свойства шрифта можно задавать на уровне абзаца через IParagraphFormat.getDefaultPortionFormat или для отдельных фрагментов через IPortionFormat.
Следующий код устанавливает шрифт и стиль текста для всего абзаца: задаётся размер шрифта, полужирный, курсив, пунктирное подчёркивание и шрифт Times New Roman для всех фрагментов абзаца.
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();
}
Результат:

Ниже пример кода, применяющий аналогичные свойства к текстовым фрагментам с полужирным шрифтом:
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 для управления интервалом абзацев. Эти свойства используются следующим образом:
- Положительное значение задаёт межстрочный интервал в процентах от высоты строки.
- Отрицательное значение задаёт межстрочный интервал в пунктах.
Следующий пример кода показывает, как задать межстрочный интервал внутри абзаца:
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();
}
Результат:

Установить тип автоподгонки для текстовых рамок
ITextFrameFormat.setAutofitType определяет, как текст будет вести себя, когда превышает границы своего контейнера. Используйте его для управления тем, будет ли текст сжиматься, вылезать за пределы или автоматически изменять размер фигуры.
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();
}
Установить привязку текстовых рамок
ITextFrameFormat.setAnchoringType определяет, как текст позиционируется вертикально внутри фигуры, например вверху, по центру или внизу.
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 для настройки табуляций в абзаце.
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.
Следующий пример кода показывает, как задать язык проверки орфографии для текстового фрагмента:
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 для определения языка текста по умолчанию при загрузке или создании презентации.
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 pt для всего текста во всех слайдах новой презентации.
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.

Ниже пример кода, показывающий, как извлечь текст с применённым эффектом 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 и настройте градиентные стопы, направление и прозрачность.