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

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

Метод 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

Див. також

 Українська