Sådan formateres tekst i C++

Sådan formateres tekst i C++

Aspose.Slides FOSS for C++ provides fine-grained text formatting through the PortionFormat klasse. En Portion er den mindste uafhængige enhed af tekst; den svarer til en enkelt formateringssekvens inden for et afsnit. Denne vejledning viser, hvordan man anvender fed, kursiv, skriftstørrelse og farveformatering på tekst i en præsentation.

Trin-for-trin guide

Trin 1: Byg og link biblioteket

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 .

Trin 2: Tilføj en form med en tekstramme

Før du formaterer tekst, skal du tilføje en form og indstille dens tekstindhold 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;
}

Trin 3: Få adgang til TextFrame

shape.text_frame() returnerer en pointer til formens TextFrame. Brug -> til at kalde metoder på den.

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

En TextFrame indeholder Paragraph objekter (tf->paragraphs()). Hver Paragraph indeholder Portion objekter (paragraph.portions()).


Trin 4: Anvend fed og kursiv formatering

Brug portion_format().set_font_bold() og portion_format().set_font_italic(). Disse metoder accepterer NullableBool::TRUE, NullableBool::FALSE, eller NullableBool::NOT_DEFINED (arve fra 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;
}

Trin 5: Indstil skriftstørrelse og farve

Indstil portion_format().set_font_height() for størrelse (i punkter) og brug fill_format() for farve.

#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) accepterer værdier 0-255 for hver kanal.


Trin 6: Flere portioner i ét afsnit

Et enkelt afsnit kan indeholde flere dele med forskellig formatering. Tilføj en ny Portion til et afsnits portions() samling:

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

Almindelige problemer og løsninger

Teksten vises sort, selv efter farven er indstillet

Sørg for fill_format().set_fill_type(FillType::SOLID) er indstillet før farven tildeles. Uden at indstille udfyldningstypen kan farveændringen muligvis ikke have nogen effekt.

NullableBool::TRUE vs true

portion_format().set_font_bold() forventer NullableBool::TRUE, ikke C++ true. At videregive true direkte vil ikke kompilere eller vil have udefineret opførsel afhængig af overload‑opløsningen.

Font vises ikke i den gemte fil

Den set_latin_font() metode indstiller den latinske skrifttypefamilie. Hvis den ikke er indstillet, bruges præsentationstemaets skrifttype. Tilpassede skrifttyper skal indlejres eller være tilgængelige på den maskine, der viser præsentationen.


Ofte stillede spørgsmål

Hvordan ændrer jeg skrifttypefamilien?

Indstil portion_format().set_latin_font():

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

FontData accepterer skrifttypefamilienavnet som en streng.

Hvordan indstiller jeg afsnitsjustering?

Brug paragraph_format().set_alignment():

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

Understøttede værdier: LEFT, CENTER, RIGHT, JUSTIFY.

Hvordan indstiller jeg linjeafstand?

Brug paragraph_format().set_space_before() (punkter før afsnit) eller paragraph_format().set_space_after() (punkter efter afsnit):

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

Se også

 Dansk