Come formattare il testo in Java

Come formattare il testo in Java

Aspose.Slides FOSS for Java fornisce una formattazione del testo a livello granulare tramite la classe PortionFormat. Un Portion è l’unità indipendente più piccola di testo; corrisponde a un singolo intervallo di formattazione all’interno di un paragrafo. Questa guida mostra come applicare la formattazione grassetto, corsivo, dimensione del carattere e colore al testo in una presentazione.

Guida passo-passo

Passo 1: Aggiungi la dipendenza Maven

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

Passo 2: Aggiungi una Forma con un Riquadro di Testo

Prima di formattare il testo, una forma deve contenere un TextFrame. Usa shape.addTextFrame() per crearne uno.

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

Passo 3: Accedi al TextFrame

shape.addTextFrame() restituisce l’oggetto TextFrame. È possibile recuperarlo in seguito tramite shape.getTextFrame().

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

Un TextFrame contiene un elenco di oggetti Paragraph (tf.getParagraphs()). Ogni Paragraph contiene oggetti Portion (paragraph.getPortions()).


Passo 4: Applicare la formattazione grassetto e corsivo

Utilizza portionFormat.setFontBold() e portionFormat.setFontItalic(). Questi metodi accettano NullableBool.TRUE, NullableBool.FALSE o NullableBool.NOT_DEFINED (eredita dal 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);
}

Passo 5: Imposta la dimensione e il colore del carattere

Imposta portionFormat.setFontHeight() per la dimensione (in punti) e usa getFillFormat() per il colore.

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) accetta valori 0-255 per ogni canale.


Passo 6: Più parti in un unico paragrafo

Un singolo paragrafo può contenere più parti con formattazioni diverse. Aggiungi un nuovo Portion alla collezione getPortions() di un paragrafo:

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

Problemi comuni e soluzioni

Il testo appare nero anche dopo aver impostato il colore

Assicurati che getFillFormat().setFillType(FillType.SOLID) venga chiamato prima di assegnare il colore. Senza impostare il tipo di riempimento, la modifica del colore potrebbe non avere effetto.

NullableBool.TRUE vs true

portionFormat.setFontBold() si aspetta NullableBool.TRUE, non il true di Java. Passare un boolean provocherà un errore di compilazione poiché il metodo si aspetta l’enumerazione NullableBool.

Il carattere non appare nel file salvato

Il metodo setLatinFont() imposta la famiglia di caratteri Latin. Se non impostato, viene utilizzato il carattere del tema della presentazione. I caratteri personalizzati devono essere incorporati o disponibili sulla macchina di visualizzazione.


Domande Frequenti

Come cambio la famiglia di caratteri?

Imposta portionFormat.setLatinFont():

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

FontData accetta il nome della famiglia di caratteri come stringa.

Come impostare l’allineamento del paragrafo?

Usa paragraphFormat.setAlignment():

import org.aspose.slides.foss.TextAlignment;

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

Valori supportati: LEFT, CENTER, RIGHT, JUSTIFY.

Come impostare l’interlinea?

Usa paragraphFormat.setSpaceBefore() (punti prima del paragrafo) o paragraphFormat.setSpaceAfter() (punti dopo il paragrafo):

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

Vedi anche

 Italiano