Как форматировать текст в Java
Aspose.Slides FOSS for Java provides fine-grained text formatting through the PortionFormat класс. A 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 frameA TextFrame содержит список 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 к абзацу’s 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, а не Java’s true. Передача булевого значения вызовет ошибку компиляции, поскольку метод ожидает NullableBool enum.
Шрифт не отображается в сохранённом файле
The 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