Як форматувати текст у C++

Як форматувати текст у C++

Aspose.Slides FOSS for C++ забезпечує тонке форматування тексту за допомогою класу PortionFormat. Portion — це найменша незалежна одиниця тексту; вона відповідає одному запуску форматування в межах абзацу. У цьому посібнику показано, як застосовувати форматування жирного, курсивного, розміру шрифту та кольору до тексту у презентації.

Покроковий посібник

Крок 1: Зібрати та підключити бібліотеку

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 .

Крок 2: Додати фігуру з текстовим кадром

Перед форматуванням тексту додайте фігуру та встановіть її текстовий вміст за допомогою 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;
}

Крок 3: Доступ до TextFrame

shape.text_frame() повертає вказівник на TextFrame форми. Використовуйте ->, щоб викликати методи на ньому.

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

TextFrame містить Paragraph об’єкти (tf->paragraphs()). Кожен Paragraph містить Portion об’єкти (paragraph.portions()).


Крок 4: Застосувати форматування жирним і курсивом

Використовуйте portion_format().set_font_bold() та portion_format().set_font_italic(). Ці методи приймають NullableBool::TRUE, NullableBool::FALSE або NullableBool::NOT_DEFINED (успадковуються від 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;
}

Крок 5: Встановити розмір шрифту та колір

Встановіть portion_format().set_font_height() для розміру (у пунктах) і використайте fill_format() для кольору.

#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) приймає значення 0-255 для кожного каналу.


Крок 6: Кілька частин в одному абзаці

Один абзац може містити кілька частин з різним форматуванням. Додайте новий Portion до колекції portions() абзаца:

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

Поширені проблеми та виправлення

Текст відображається чорним, навіть після встановлення кольору

Переконайтеся, що fill_format().set_fill_type(FillType::SOLID) встановлено перед призначенням кольору. Без встановлення типу заповнення зміна кольору може не мати ефекту.

NullableBool::TRUE проти true

portion_format().set_font_bold() очікує NullableBool::TRUE, а не C++ true. Передача true безпосередньо не скомпілюється або призведе до невизначеної поведінки залежно від розв’язання перевантаження.

Шрифт не відображається у збереженому файлі

Метод set_latin_font() встановлює сімейство латинських шрифтів. Якщо не встановлено, використовується шрифт теми презентації. Користувацькі шрифти мають бути вбудовані або доступні на машині перегляду.


Поширені запитання

Як змінити сімейство шрифтів?

Встановити portion_format().set_latin_font():

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

FontData приймає назву сімейства шрифтів як рядок.

Як встановити вирівнювання абзацу?

Використайте paragraph_format().set_alignment():

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

Підтримувані значення: LEFT, CENTER, RIGHT, JUSTIFY.

Як встановити міжрядковий інтервал?

Використовуйте paragraph_format().set_space_before() (точки перед абзацом) або paragraph_format().set_space_after() (точки після абзацу):

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

Див. також

 Українська