Kako formatirati tekst u C++

Kako formatirati tekst u C++

Aspose.Slides FOSS for C++ pruža detaljno formatiranje teksta putem klase PortionFormat. Portion je najmanja samostalna jedinica teksta; ona se mapira na jedan formatirajući segment unutar odlomka. Ovaj vodič pokazuje kako primijeniti podebljano, kurziv, veličinu fonta i formatiranje boje na tekst u prezentaciji.

Vodič korak po korak

Korak 1: Izgradnja i povezivanje biblioteke

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 .

Korak 2: Dodajte oblik s tekstualnim okvirom

Prije formatiranja teksta, dodajte oblik i postavite njegov sadržaj teksta putem 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;
}

Korak 3: Pristup TextFrameu

shape.text_frame() vraća pokazivač na TextFrame oblika. Koristite -> za pozivanje metoda na njemu.

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

TextFrame sadrži Paragraph objekata (tf->paragraphs()). Svaki Paragraph sadrži Portion objekata (paragraph.portions()).


Korak 4: Primijeni podebljano i kurzivno oblikovanje

Koristite portion_format().set_font_bold() i portion_format().set_font_italic(). Ove metode prihvaćaju NullableBool::TRUE, NullableBool::FALSE ili NullableBool::NOT_DEFINED (nasljeđuju od 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;
}

Korak 5: Postavi veličinu fonta i boju

Postavite portion_format().set_font_height() za veličinu (u točkama) i upotrijebite fill_format() za boju.

#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) prihvaća vrijednosti 0‑255 za svaki kanal.


Korak 6: Više dijelova u jednom odlomku

Jedan odlomak može sadržavati više dijelova s različitim formatiranjem. Dodajte novi Portion u kolekciju portions() odlomka:

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

Uobičajeni problemi i rješenja

Tekst se pojavljuje crno čak i nakon postavljanja boje

Provjerite je li fill_format().set_fill_type(FillType::SOLID) postavljen prije dodjele boje. Bez postavljanja vrste ispune, promjena boje možda neće imati učinak.

NullableBool::TRUE vs true

portion_format().set_font_bold() očekuje NullableBool::TRUE, a ne C++ true. Prosljeđivanje true izravno neće se kompilirati ili će imati neodređeno ponašanje ovisno o rješavanju preopterećenja.

Font se ne pojavljuje u spremljenoj datoteci

Metoda set_latin_font() postavlja latinsku obitelj fontova. Ako nije postavljeno, koristi se font teme prezentacije. Prilagođeni fontovi moraju biti ugrađeni ili dostupni na računalu za pregled.


Često postavljana pitanja

Kako promijeniti obitelj fonta?

Postavi portion_format().set_latin_font():

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

FontData prihvaća naziv obitelji fonta kao string.

Kako postaviti poravnanje odlomka?

Koristite paragraph_format().set_alignment():

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

Podržane vrijednosti: LEFT, CENTER, RIGHT, JUSTIFY.

Kako postaviti razmak između redaka?

Koristite paragraph_format().set_space_before() (točke prije odlomka) ili paragraph_format().set_space_after() (točke nakon odlomka):

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

Vidi također

 Hrvatski