Как форматировать текст в Java

Как форматировать текст в 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 frame

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 в коллекцию 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

См. также

 Русский