Как да форматирате текст в 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, а не Java‑овия true. Предаването на булева стойност ще предизвика грешка при компилация, тъй като методът очаква изброеното 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

Вижте също

 Български