Comment formater le texte dans Java

Comment formater le texte dans Java

Aspose.Slides FOSS for Java provides fine-grained text formatting through the PortionFormat classe. A Portion est la plus petite unité indépendante de texte ; elle correspond à une seule séquence de formatage au sein d’un paragraphe. Ce guide montre comment appliquer le gras, l’italique, la taille de police et le format de couleur au texte dans une présentation.

Guide étape par étape

Étape 1 : ajouter la dépendance Maven

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

Étape 2 : Ajouter une forme avec un cadre de texte

Avant de formater le texte, une forme doit contenir un TextFrame. Utilisez shape.addTextFrame() pour en créer 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);
}

Étape 3 : Accéder au TextFrame

shape.addTextFrame() renvoie le TextFrame objet. Vous pouvez également le récupérer plus tard via shape.getTextFrame().

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

Un TextFrame contient une liste de Paragraph objets (tf.getParagraphs()). Chaque Paragraph contient Portion objets (paragraph.getPortions()).


Étape 4 : Appliquer le formatage gras et italique

Utilisez portionFormat.setFontBold() et portionFormat.setFontItalic(). Ces méthodes acceptent NullableBool.TRUE, NullableBool.FALSE, ou NullableBool.NOT_DEFINED (hérite du maître).

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

Étape 5 : Définir la taille de police et la couleur

Définir portionFormat.setFontHeight() pour la taille (en points) et utilisez getFillFormat() pour la couleur.

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) accepte des valeurs 0-255 pour chaque canal.


Étape 6 : Plusieurs portions dans un même paragraphe

Un seul paragraphe peut contenir plusieurs parties avec une mise en forme différente. Ajoutez un nouveau Portion à la getPortions() collection :

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

Problèmes courants et solutions

Le texte apparaît en noir même après avoir défini la couleur

Assurez‑vous getFillFormat().setFillType(FillType.SOLID) est appelé avant d’assigner la couleur. Sans définir le type de remplissage, le changement de couleur peut ne pas avoir d’effet.

NullableBool.TRUE vs true

portionFormat.setFontBold() s’attend à NullableBool.TRUE, pas les Java true. Passer un booléen provoquera une erreur de compilation puisque la méthode attend le NullableBool enum.

La police n’apparaît pas dans le fichier enregistré

Le setLatinFont() la méthode définit la famille de polices latines. Si elle n’est pas définie, la police du thème de présentation est utilisée. Les polices personnalisées doivent être incorporées ou disponibles sur la machine de visualisation.


Foire aux questions

Comment changer la famille de polices ?

Définir portionFormat.setLatinFont():

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

FontData accepte le nom de la famille de polices sous forme de chaîne.

Comment définir l’alignement du paragraphe ?

Utiliser paragraphFormat.setAlignment():

import org.aspose.slides.foss.TextAlignment;

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

Valeurs prises en charge : LEFT, CENTER, RIGHT, JUSTIFY.

Comment définir l’espacement des lignes ?

Utiliser paragraphFormat.setSpaceBefore() (points avant le paragraphe) ou paragraphFormat.setSpaceAfter() (points après le paragraphe) :

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

Voir aussi

 Français