Як форматувати текст у Java

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

A 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, а не Java’s true. Передача булевого значення викличе помилку компіляції, оскільки метод очікує NullableBool enum.

Шрифт не з’являється у збереженому файлі

Цей setLatinFont() метод встановлює латинську сімейство шрифтів. Якщо не встановлено, використовується шрифт теми презентації. Користувацькі шрифти мають бути вбудовані або доступні на машині перегляду.


Часті запитання

Як змінити сімейство шрифту?

Встановити 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

Див. також

 Українська