Come formattare il testo in C++

Come formattare il testo in C++

Aspose.Slides FOSS per C++ 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: Compila e collega la libreria

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 .

Passo 2: Aggiungi una Forma con un Riquadro di Testo

Prima di formattare il testo, aggiungi una forma e imposta il suo contenuto testuale tramite 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;
}

Passo 3: Accedi al TextFrame

shape.text_frame() restituisce un puntatore al TextFrame della forma. Usa -> per chiamare i metodi su di esso.

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

Un TextFrame contiene Paragraph oggetti (tf->paragraphs()). Ogni Paragraph contiene Portion oggetti (paragraph.portions()).


Passo 4: Applicare la formattazione grassetto e corsivo

Usa portion_format().set_font_bold() e portion_format().set_font_italic(). Questi metodi accettano NullableBool::TRUE, NullableBool::FALSE o NullableBool::NOT_DEFINED (eredita dal 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;
}

Passo 5: Imposta la dimensione e il colore del carattere

Imposta portion_format().set_font_height() per la dimensione (in punti) e usa fill_format() per il colore.

#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) accetta valori da 0 a 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 portions() di un paragrafo:

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

Problemi comuni e soluzioni

Il testo appare nero anche dopo aver impostato il colore

Assicurati che fill_format().set_fill_type(FillType::SOLID) sia impostato prima di assegnare il colore. Senza impostare il tipo di riempimento, la modifica del colore potrebbe non avere effetto.

NullableBool::TRUE vs true

portion_format().set_font_bold() si aspetta NullableBool::TRUE, non il C++ true. Passare true direttamente non compilerà o avrà un comportamento indefinito a seconda della risoluzione del sovraccarico.

Il carattere non appare nel file salvato

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


Domande Frequenti

Come faccio a cambiare la famiglia di caratteri?

Imposta portion_format().set_latin_font():

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

FontData accetta il nome della famiglia di caratteri come stringa.

Come impostare l’allineamento del paragrafo?

Usa paragraph_format().set_alignment():

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

Valori supportati: LEFT, CENTER, RIGHT, JUSTIFY.

Come impostare l’interlinea?

Usa paragraph_format().set_space_before() (punti prima del paragrafo) o paragraph_format().set_space_after() (punti dopo il paragrafo):

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

Vedi anche

 Italiano