Как форматировать текст в Java
Aspose.Slides FOSS for Java предоставляет детальное форматирование текста через класс PortionFormat. Portion — это наименьшая независимая единица текста; она соответствует одному запуску форматирования внутри абзаца. Это руководство показывает, как применить полужирный, курсив, размер шрифта и цветовое форматирование к тексту в презентации.
Пошаговое руководство
Шаг 1: Добавьте зависимость Maven
<dependency>
<groupId>org.aspose.slides.foss</groupId>
<artifactId>aspose-slides-foss</artifactId>
<version>1.0.0</version>
</dependency>Шаг 2: Добавить форму с текстовым фреймом
Перед форматированием текста форма должна содержать TextFrame. Используйте shape.addTextFrame(), чтобы создать её.
import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.ITextFrame;
import org.aspose.slides.foss.IParagraph;
import org.aspose.slides.foss.IPortion;
import org.aspose.slides.foss.Portion;
import org.aspose.slides.foss.IPortionFormat;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.FillType;
import org.aspose.slides.foss.NullableBool;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.drawing.Color;
try (Presentation prs = new Presentation()) {
ISlide slide = prs.getSlides().get(0);
IAutoShape shape = slide.getShapes().addAutoShape(
ShapeType.RECTANGLE, 50, 50, 500, 150
);
ITextFrame tf = shape.addTextFrame("Default text: will be formatted");
prs.save("output.pptx", SaveFormat.PPTX);
}Шаг 3: Доступ к TextFrame
shape.addTextFrame() возвращает объект TextFrame. Вы также можете получить его позже через shape.getTextFrame().
ITextFrame tf = shape.getTextFrame(); // if the frame already exists
ITextFrame tf = shape.addTextFrame(""); // creates a new frameTextFrame содержит список объектов Paragraph (tf.getParagraphs()). Каждый Paragraph содержит Portion объектов (paragraph.getPortions()).
Шаг 4: Применить полужирное и курсивное форматирование
Используйте portionFormat.setFontBold() и portionFormat.setFontItalic(). Эти методы принимают NullableBool.TRUE, NullableBool.FALSE или NullableBool.NOT_DEFINED (наследуются от master).
import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.ITextFrame;
import org.aspose.slides.foss.IParagraph;
import org.aspose.slides.foss.IPortion;
import org.aspose.slides.foss.Portion;
import org.aspose.slides.foss.IPortionFormat;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.FillType;
import org.aspose.slides.foss.NullableBool;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.drawing.Color;
try (Presentation prs = new Presentation()) {
ISlide slide = prs.getSlides().get(0);
IAutoShape shape = slide.getShapes().addAutoShape(
ShapeType.RECTANGLE, 50, 50, 500, 150
);
ITextFrame tf = shape.addTextFrame("Bold and italic text");
IPortionFormat fmt = tf.getParagraphs().get(0)
.getPortions().get(0).getPortionFormat();
fmt.setFontBold(NullableBool.TRUE);
fmt.setFontItalic(NullableBool.TRUE);
prs.save("bold-italic.pptx", SaveFormat.PPTX);
}Шаг 5: Установить размер шрифта и цвет
Установите portionFormat.setFontHeight() для размера (в пунктах) и используйте getFillFormat() для цвета.
import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.ITextFrame;
import org.aspose.slides.foss.IParagraph;
import org.aspose.slides.foss.IPortion;
import org.aspose.slides.foss.Portion;
import org.aspose.slides.foss.IPortionFormat;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.FillType;
import org.aspose.slides.foss.NullableBool;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.drawing.Color;
try (Presentation prs = new Presentation()) {
ISlide slide = prs.getSlides().get(0);
IAutoShape shape = slide.getShapes().addAutoShape(
ShapeType.RECTANGLE, 50, 50, 500, 150
);
ITextFrame tf = shape.addTextFrame("Large corporate-blue heading");
IPortionFormat fmt = tf.getParagraphs().get(0)
.getPortions().get(0).getPortionFormat();
fmt.setFontHeight(32); // 32pt font
fmt.setFontBold(NullableBool.TRUE);
fmt.getFillFormat().setFillType(FillType.SOLID);
fmt.getFillFormat().getSolidFillColor().setColor(
Color.fromArgb(255, 0, 70, 127)
);
prs.save("colored-text.pptx", SaveFormat.PPTX);
}Color.fromArgb(alpha, red, green, blue) принимает значения от 0 до 255 для каждого канала.
Шаг 6: Несколько частей в одном абзаце
Один абзац может содержать несколько частей с разным форматированием. Добавьте новый Portion в коллекцию getPortions() абзаца:
import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.ITextFrame;
import org.aspose.slides.foss.IParagraph;
import org.aspose.slides.foss.IPortion;
import org.aspose.slides.foss.Portion;
import org.aspose.slides.foss.IPortionFormat;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.FillType;
import org.aspose.slides.foss.NullableBool;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.drawing.Color;
try (Presentation prs = new Presentation()) {
ISlide slide = prs.getSlides().get(0);
IAutoShape shape = slide.getShapes().addAutoShape(
ShapeType.RECTANGLE, 50, 50, 600, 100
);
ITextFrame tf = shape.addTextFrame(""); // start with empty frame
IParagraph paragraph = tf.getParagraphs().get(0);
// First portion: normal text
IPortion portion1 = paragraph.getPortions().get(0);
portion1.setText("Normal text followed by ");
portion1.getPortionFormat().setFontHeight(20);
// Second portion: bold red text
Portion portion2 = new Portion("bold red text");
portion2.getPortionFormat().setFontHeight(20);
portion2.getPortionFormat().setFontBold(NullableBool.TRUE);
portion2.getPortionFormat().getFillFormat().setFillType(FillType.SOLID);
portion2.getPortionFormat().getFillFormat().getSolidFillColor().setColor(
Color.fromArgb(255, 200, 0, 0)
);
paragraph.getPortions().add(portion2);
prs.save("mixed-format.pptx", SaveFormat.PPTX);
}Распространённые проблемы и их решения
Текст отображается черным, даже после установки цвета
Убедитесь, что getFillFormat().setFillType(FillType.SOLID) вызывается до назначения цвета. Без установки типа заливки изменение цвета может не дать эффекта.
NullableBool.TRUE против true
portionFormat.setFontBold() ожидает NullableBool.TRUE, а не true из Java. Передача булевого значения вызовет ошибку компиляции, поскольку метод ожидает перечисление NullableBool.
Шрифт не отображается в сохранённом файле
Метод setLatinFont() задает семейство шрифтов Latin. Если не задано, используется шрифт темы презентации. Пользовательские шрифты должны быть встроены или доступны на машине просмотра.
Часто задаваемые вопросы
Как изменить семейство шрифтов?
Установить portionFormat.setLatinFont():
fmt.setLatinFont(new FontData("Arial"));FontData принимает имя семейства шрифтов в виде строки.
Как установить выравнивание абзаца?
Используйте paragraphFormat.setAlignment():
import org.aspose.slides.foss.TextAlignment;
tf.getParagraphs().get(0).getParagraphFormat()
.setAlignment(TextAlignment.CENTER);Поддерживаемые значения: LEFT, CENTER, RIGHT, JUSTIFY.
Как установить межстрочный интервал?
Используйте paragraphFormat.setSpaceBefore() (точки перед абзацем) или paragraphFormat.setSpaceAfter() (точки после абзаца):
tf.getParagraphs().get(0).getParagraphFormat().setSpaceBefore(12); // 12pt before
tf.getParagraphs().get(0).getParagraphFormat().setSpaceAfter(6); // 6pt after