Cara Memformat Teks dalam C++

Cara Memformat Teks dalam C++

Aspose.Slides FOSS for C++ provides fine-grained text formatting through the PortionFormat kelas. A Portion ialah unit teks bebas terkecil; ia memetakan kepada satu rentetan pemformatan dalam perenggan. Panduan ini menunjukkan cara menerapkan pemformatan tebal, condong, saiz fon, dan warna pada teks dalam persembahan.

Panduan Langkah demi Langkah

Langkah 1: Bina dan Pautkan Perpustakaan

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 .

Langkah 2: Tambah Bentuk dengan Bingkai Teks

Sebelum memformat teks, tambahkan bentuk dan tetapkan kandungan teksnya melalui 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;
}

Langkah 3: Akses TextFrame

shape.text_frame() mengembalikan penunjuk kepada shape’s TextFrame. Gunakan -> untuk memanggil kaedah pada ia.

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

Sebuah TextFrame mengandungi Paragraph objek (tf->paragraphs()). Setiap Paragraph mengandungi Portion objek (paragraph.portions()).


Langkah 4: Terapkan Pemformatan Tebal dan Condong

Gunakan portion_format().set_font_bold() dan portion_format().set_font_italic(). Kaedah-kaedah ini menerima NullableBool::TRUE, NullableBool::FALSE, atau NullableBool::NOT_DEFINED (warisi dari 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;
}

Langkah 5: Tetapkan Saiz Fon dan Warna

Tetapkan portion_format().set_font_height() untuk saiz (dalam mata) dan gunakan fill_format() untuk warna.

#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) menerima nilai 0-255 untuk setiap saluran.


Langkah 6: Pelbagai Bahagian dalam Satu Perenggan

Satu perenggan tunggal boleh mengandungi pelbagai bahagian dengan pemformatan yang berbeza. Tambah satu yang baru Portion kepada perenggan portions() koleksi:

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

Isu Umum dan Penyelesaian

Teks muncul hitam walaupun selepas menetapkan warna

Pastikan fill_format().set_fill_type(FillType::SOLID) ditetapkan sebelum menetapkan warna. Tanpa menetapkan jenis isi, perubahan warna mungkin tidak memberi kesan.

NullableBool::TRUE vs true

portion_format().set_font_bold() menjangka NullableBool::TRUE, bukan C++ true. Memanggil true secara langsung tidak akan dapat disusun atau akan mempunyai kelakuan tidak ditakrifkan bergantung pada resolusi overload.

Font tidak muncul dalam fail yang disimpan

Kaedah set_latin_font() kaedah menetapkan keluarga fon Latin. Jika tidak ditetapkan, fon tema persembahan akan digunakan. Fon khusus mesti disematkan atau tersedia pada mesin penonton.


Soalan Lazim

Bagaimana saya menukar keluarga fon?

Tetapkan portion_format().set_latin_font():

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

FontData menerima nama keluarga fon sebagai rentetan.

Bagaimana saya menetapkan penjajaran perenggan?

Gunakan paragraph_format().set_alignment():

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

Nilai yang disokong: LEFT, CENTER, RIGHT, JUSTIFY.

Bagaimana saya menetapkan jarak baris?

Gunakan paragraph_format().set_space_before() (titik sebelum perenggan) atau paragraph_format().set_space_after() (titik selepas perenggan):

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

Lihat Juga

 Bahasa Melayu