Ako formátovať text v C++

Aspose.Slides FOSS for C++ poskytuje detailné formátovanie textu prostredníctvom triedy PortionFormat. Portion je najmenšia nezávislá jednotka textu; mapuje sa na jeden formátovací beh v odstavci. Tento návod ukazuje, ako použiť tučné, kurzívne, veľkosť písma a farebné formátovanie na text v prezentácii.

Sprievodca krok za krokom

Krok 1: Zostavte a prepojte knižnicu

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 .

Krok 2: Pridať tvar s textovým rámcom

Pred formátovaním textu pridajte tvar a nastavte jeho textový obsah pomocou 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;
}

Krok 3: Prístup k TextFrame

shape.text_frame() vracia ukazovateľ na TextFrame tvaru. Použite -> na volanie metód na ňom.

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

TextFrame obsahuje Paragraph objektov (tf->paragraphs()). Každý Paragraph obsahuje Portion objektov (paragraph.portions()).


Krok 4: Použiť tučné a kurzívne formátovanie

Použite portion_format().set_font_bold() a portion_format().set_font_italic(). Tieto metódy akceptujú NullableBool::TRUE, NullableBool::FALSE alebo NullableBool::NOT_DEFINED (zdediť z mastera).

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

Krok 5: Nastavte veľkosť písma a farbu

Nastavte portion_format().set_font_height() pre veľkosť (v bodoch) a použite fill_format() pre farbu.

#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) akceptuje hodnoty 0-255 pre každý kanál.


Krok 6: Viacero častí v jednom odseku

Jeden odsek môže obsahovať viacero častí s rôznym formátovaním. Pridajte nový Portion do kolekcie portions() odseku:

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

Bežné problémy a riešenia

Text sa zobrazuje čierne aj po nastavení farby

Uistite sa, že fill_format().set_fill_type(FillType::SOLID) je nastavený pred priradením farby. Bez nastavenia typu výplne môže zmena farby nemajú žiadny účinok.

NullableBool::TRUE vs true

portion_format().set_font_bold() očakáva NullableBool::TRUE, nie C++ true. Priame odovzdanie true sa nebude kompilovať alebo bude mať nedefinované správanie v závislosti od rozlíšenia preťaženia.

Písmo sa v uloženom súbore nezobrazuje

Metóda set_latin_font() nastavuje rodinu latinských fontov. Ak nie je nastavená, použije sa písmo témy prezentácie. Vlastné fonty musia byť vložené alebo dostupné na zobrazovacom zariadení.


Často kladené otázky

Ako zmením fontovú rodinu?

Nastaviť portion_format().set_latin_font():

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

FontData akceptuje názov rodiny písma ako reťazec.

Ako nastaviť zarovnanie odseku?

Použiť paragraph_format().set_alignment():

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

Podporované hodnoty: LEFT, CENTER, RIGHT, JUSTIFY.

Ako nastaviť riadkový rozostup?

Použite paragraph_format().set_space_before() (bodky pred odstavcom) alebo paragraph_format().set_space_after() (bodky po odstavci):

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

Pozri tiež

 Slovenčina