Comment formater du texte en C++

Comment formater du texte en C++

Aspose.Slides FOSS for C++ offre un formatage de texte granulaire grâce à la classe PortionFormat. Un Portion est la plus petite unité indépendante de texte ; il 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 formatage de couleur au texte d’une présentation.

Guide étape par étape

Étape 1 : Compiler et lier la bibliothèque

git clone https://github.com/aspose-slides-foss/Aspose.Slides-FOSS-for-Cpp.git
cd Aspose.Slides-FOSS-for-Cpp && mkdir build && cd build
cmake .. && cmake --build .

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

Avant de formater le texte, ajoutez une forme et définissez son contenu texte via shape.text_frame()->set_text().

#include <Aspose/Slides/Foss/presentation.h>

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;
    auto& slide = prs.slides()[0];
    auto& shape = slide.shapes().add_auto_shape(
        asf::ShapeType::RECTANGLE, 50, 50, 500, 150);
    shape.text_frame()->set_text("Default text: will be formatted");
    prs.save("output.pptx", asf::SaveFormat::PPTX);
    return 0;
}

Étape 3 : Accéder au TextFrame

shape.text_frame() renvoie un pointeur vers le TextFrame de la forme. Utilisez -> pour appeler des méthodes dessus.

auto* tf = shape.text_frame();          // pointer to the shape's text frame
tf->set_text("your text here");

Un TextFrame contient Paragraph objets (tf->paragraphs()). Chaque Paragraph contient Portion objets (paragraph.portions()).


Étape 4 : Appliquer le format gras et italique

Utilisez portion_format().set_font_bold() et portion_format().set_font_italic(). Ces méthodes acceptent NullableBool::TRUE, NullableBool::FALSE ou NullableBool::NOT_DEFINED (hérite du master).

#include <Aspose/Slides/Foss/presentation.h>

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;
    auto& slide = prs.slides()[0];
    auto& shape = slide.shapes().add_auto_shape(
        asf::ShapeType::RECTANGLE, 50, 50, 500, 150);
    shape.text_frame()->set_text("Bold and italic text");
    auto* tf = shape.text_frame();

    auto& fmt = tf->paragraphs()[0].portions()[0].portion_format();
    fmt.set_font_bold(asf::NullableBool::TRUE);
    fmt.set_font_italic(asf::NullableBool::TRUE);

    prs.save("bold-italic.pptx", asf::SaveFormat::PPTX);
    return 0;
}

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

Définissez portion_format().set_font_height() pour la taille (en points) et utilisez fill_format() pour la couleur.

#include <Aspose/Slides/Foss/presentation.h>

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;
    auto& slide = prs.slides()[0];
    auto& shape = slide.shapes().add_auto_shape(
        asf::ShapeType::RECTANGLE, 50, 50, 500, 150);
    shape.text_frame()->set_text("Large corporate-blue heading");
    auto* tf = shape.text_frame();

    auto& fmt = tf->paragraphs()[0].portions()[0].portion_format();
    fmt.set_font_height(32);                               // 32pt font
    fmt.set_font_bold(asf::NullableBool::TRUE);
    fmt.fill_format().set_fill_type(asf::FillType::SOLID);
    fmt.fill_format().solid_fill_color().set_color(
        asf::Color::from_argb(255, 0, 70, 127));

    prs.save("colored-text.pptx", asf::SaveFormat::PPTX);
    return 0;
}

Color::from_argb(alpha, red, green, blue) accepte des valeurs de 0 à 255 pour chaque canal.


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

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

#include <Aspose/Slides/Foss/presentation.h>

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;
    auto& slide = prs.slides()[0];
    auto& shape = slide.shapes().add_auto_shape(
        asf::ShapeType::RECTANGLE, 50, 50, 600, 100);
    shape.text_frame()->set_text(""); // start with empty text
    auto* tf = shape.text_frame();

    auto& paragraph = tf->paragraphs()[0];

    // First portion: normal text
    auto& portion1 = paragraph.portions()[0];
    portion1.set_text("Normal text followed by ");
    portion1.portion_format().set_font_height(20);

    // Second portion: bold red text
    asf::Portion portion2;
    portion2.set_text("bold red text");
    portion2.portion_format().set_font_height(20);
    portion2.portion_format().set_font_bold(asf::NullableBool::TRUE);
    portion2.portion_format().fill_format().set_fill_type(asf::FillType::SOLID);
    portion2.portion_format().fill_format().solid_fill_color().set_color(
        asf::Color::from_argb(255, 200, 0, 0));
    paragraph.portions().add(portion2);

    prs.save("mixed-format.pptx", asf::SaveFormat::PPTX);
    return 0;
}

Problèmes courants et solutions

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

Assurez-vous que fill_format().set_fill_type(FillType::SOLID) est défini avant d’attribuer la couleur. Sans définir le type de remplissage, le changement de couleur peut ne pas avoir d’effet.

NullableBool::TRUE vs true

portion_format().set_font_bold() attend NullableBool::TRUE, pas le C++ true. Passer true directement ne compilera pas ou entraînera un comportement indéfini selon la résolution de surcharge.

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

La méthode set_latin_font() définit la famille de polices latines. Si elle n’est pas définie, la police du thème de la 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 police ?

Définir portion_format().set_latin_font() :

fmt.set_latin_font(asf::FontData("Arial"));

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

Comment définir l’alignement du paragraphe ?

Utilisez paragraph_format().set_alignment():

tf.paragraphs()[0].paragraph_format().set_alignment(asf::TextAlignment::CENTER);

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

Comment définir l’interligne ?

Utilisez paragraph_format().set_space_before() (points avant le paragraphe) ou paragraph_format().set_space_after() (points après le paragraphe):

tf.paragraphs()[0].paragraph_format().set_space_before(12); // 12pt before
tf.paragraphs()[0].paragraph_format().set_space_after(6);   // 6pt after

Voir aussi

 Français