Com formatar text a Java

Com formatar text a Java

Aspose.Slides FOSS per a Java ofereix formatació de text de gran precisió mitjançant la classe PortionFormat. Un Portion és la unitat independent més petita de text; es correspon amb una única execució de formatació dins d’un paràgraf. Aquesta guia mostra com aplicar formatació en negreta, cursiva, mida de lletra i color al text d’una presentació.

Guia pas a pas

Pas 1: Afegeix la dependència Maven

<dependency>
  <groupId>org.aspose.slides.foss</groupId>
  <artifactId>aspose-slides-foss</artifactId>
  <version>1.0.0</version>
</dependency>

Pas 2: Afegeix una forma amb un marc de text

Abans de formatar el text, una forma ha de contenir un TextFrame. Utilitza shape.addTextFrame() per crear‑ne un.

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);
}

Pas 3: Accedir al TextFrame

shape.addTextFrame() retorna l’objecte TextFrame. També podeu recuperar-lo més tard a través de shape.getTextFrame().

ITextFrame tf = shape.getTextFrame();          // if the frame already exists
ITextFrame tf = shape.addTextFrame("");        // creates a new frame

Un TextFrame conté una llista d’objectes Paragraph (tf.getParagraphs()). Cada Paragraph conté objectes Portion (paragraph.getPortions()).


Pas 4: Aplica el format en negreta i cursiva

Utilitzeu portionFormat.setFontBold() i portionFormat.setFontItalic(). Aquests mètodes accepten NullableBool.TRUE, NullableBool.FALSE o NullableBool.NOT_DEFINED (hereten del mestre).

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);
}

Pas 5: Estableix la mida i el color de la lletra

Estableix portionFormat.setFontHeight() per a la mida (en punts) i utilitza getFillFormat() per al color.

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) accepta valors de 0-255 per a cada canal.


Pas 6: Múltiples porcions en un paràgraf

Un únic paràgraf pot contenir diverses porcions amb format diferent. Afegeix un nou Portion a la col·lecció getPortions() d’un paràgraf:

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);
}

Problemes comuns i solucions

El text apareix negre encara que s’hagi establert el color

Assegureu que getFillFormat().setFillType(FillType.SOLID) es cridi abans d’assignar el color. Sense establir el tipus d’emplenament, el canvi de color pot no tenir cap efecte.

NullableBool.TRUE vs true

portionFormat.setFontBold() espera NullableBool.TRUE, no el true de Java. Passar un booleà provocarà un error de compilació ja que el mètode espera l’enumeració NullableBool.

La font no apareix al fitxer desat

El mètode setLatinFont() estableix la família de tipografia llatina. Si no s’estableix, s’utilitza la tipografia del tema de la presentació. Les tipografies personalitzades han d’estar incrustades o disponibles a la màquina de visualització.


Preguntes freqüents

Com puc canviar la família de tipografia?

Defineix portionFormat.setLatinFont():

fmt.setLatinFont(new FontData("Arial"));

FontData accepta el nom de la família de fonts com a cadena.

Com puc establir l’alineació del paràgraf?

Utilitza paragraphFormat.setAlignment():

import org.aspose.slides.foss.TextAlignment;

tf.getParagraphs().get(0).getParagraphFormat()
    .setAlignment(TextAlignment.CENTER);

Valors compatibles: LEFT, CENTER, RIGHT, JUSTIFY.

Com puc establir l’interlineat?

Utilitzeu paragraphFormat.setSpaceBefore() (punts abans del paràgraf) o paragraphFormat.setSpaceAfter() (punts després del paràgraf):

tf.getParagraphs().get(0).getParagraphFormat().setSpaceBefore(12);  // 12pt before
tf.getParagraphs().get(0).getParagraphFormat().setSpaceAfter(6);    // 6pt after

Vegeu també

 Català