Cómo formatear texto en C++

Cómo formatear texto en C++

Aspose.Slides FOSS for C++ provides fine-grained text formatting through the PortionFormat clase. A Portion es la unidad independiente más pequeña de texto; se corresponde con una única ejecución de formato dentro de un párrafo. Esta guía muestra cómo aplicar formato en negrita, cursiva, tamaño de fuente y color al texto en una presentación.

Guía paso a paso

Paso 1: Compilar y enlazar la biblioteca

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 .

Paso 2: Añadir una forma con un marco de texto

Antes de formatear el texto, agregue una forma y establezca su contenido de texto mediante 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;
}

Paso 3: Acceder al TextFrame

shape.text_frame() devuelve un puntero al shape’s TextFrame. Use -> para llamar a métodos sobre él.

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

Una TextFrame contiene Paragraph objetos (tf->paragraphs()). Cada Paragraph contiene Portion objetos (paragraph.portions()).


Paso 4: Aplicar formato de negrita y cursiva

Usar portion_format().set_font_bold() y portion_format().set_font_italic(). Estos métodos aceptan NullableBool::TRUE, NullableBool::FALSE, o NullableBool::NOT_DEFINED (heredar del maestro).

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

Paso 5: Establecer tamaño de fuente y color

Establecer portion_format().set_font_height() para el tamaño (en puntos) y usar fill_format() para el color.

#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) acepta valores de 0-255 para cada canal.


Paso 6: Múltiples porciones en un mismo párrafo

Un solo párrafo puede contener múltiples porciones con formato diferente. Añade un nuevo Portion a un párrafo portions() colección:

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

Problemas comunes y soluciones

El texto aparece negro incluso después de establecer el color

Asegúrese fill_format().set_fill_type(FillType::SOLID) está configurado antes de asignar el color. Sin configurar el tipo de relleno, el cambio de color puede no tener efecto.

NullableBool::TRUE vs true

portion_format().set_font_bold() espera NullableBool::TRUE, no el C++ true. Pasar true directamente no compilará o tendrá un comportamiento indefinido dependiendo de la resolución de sobrecarga.

La fuente no aparece en el archivo guardado

El set_latin_font() método establece la familia de fuentes Latin. Si no se establece, se usa la fuente del tema de la presentación. Las fuentes personalizadas deben estar incrustadas o disponibles en la máquina de visualización.


Preguntas frecuentes

¿Cómo cambio la familia de fuentes?

Establecer portion_format().set_latin_font():

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

FontData acepta el nombre de la familia tipográfica como una cadena.

¿Cómo establezco la alineación del párrafo?

Usar paragraph_format().set_alignment():

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

Valores admitidos: LEFT, CENTER, RIGHT, JUSTIFY.

¿Cómo configuro el espaciado de líneas?

Usar paragraph_format().set_space_before() (puntos antes del párrafo) o paragraph_format().set_space_after() (puntos después del párrafo):

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

Ver también

 Español