Cara Menambah Bentuk ke PowerPoint dalam C++

Cara Menambah Bentuk ke PowerPoint dalam C++

Aspose.Slides FOSS for C++ menyokong penambahan AutoShapes, Tables, Connectors, dan PictureFrames ke slaid persembahan. Semua jenis bentuk ditambahkan melalui koleksi slide.shapes().

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: Buat Persembahan

Gunakan alokasi stack untuk pembersihan RAII.

#include <Aspose/Slides/Foss/presentation.h>

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;
    auto& slide = prs.slides()[0];
    // ... add shapes ...
    prs.save("output.pptx", asf::SaveFormat::PPTX);
    return 0;
}

Langkah 3: Tambah AutoShape

slide.shapes().add_auto_shape(shape_type, x, y, width, height) meletakkan bentuk pada kedudukan dan saiz yang diberikan (semua dalam mata). Gunakan pemalar ShapeType untuk memilih bentuk.

#include <Aspose/Slides/Foss/presentation.h>

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;
    auto& slide = prs.slides()[0];

    // Rectangle
    auto& rect = slide.shapes().add_auto_shape(
        asf::ShapeType::RECTANGLE, 50, 50, 300, 100);
    rect.text_frame()->set_text("Rectangle shape");

    // Ellipse
    auto& ellipse = slide.shapes().add_auto_shape(
        asf::ShapeType::ELLIPSE, 400, 50, 200, 100);
    ellipse.text_frame()->set_text("Ellipse shape");

    prs.save("autoshapes.pptx", asf::SaveFormat::PPTX);
    return 0;
}

Langkah 4: Tambah Jadual

slide.shapes().add_table(x, y, col_widths, row_heights) membuat jadual pada kedudukan yang ditentukan. Lebar lajur dan tinggi baris adalah vektor nilai titik.

#include <Aspose/Slides/Foss/presentation.h>
#include <vector>
#include <string>

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;
    auto& slide = prs.slides()[0];

    std::vector<double> col_widths = {150.0, 150.0, 150.0};
    std::vector<double> row_heights = {40.0, 40.0, 40.0};
    auto& table = slide.shapes().add_table(50, 200, col_widths, row_heights);

    // Set header row text
    std::vector<std::string> headers = {"Product", "Units", "Revenue"};
    for (size_t col = 0; col < headers.size(); ++col) {
        table.rows()[0][col].text_frame()->set_text(headers[col]);
    }

    // Set data rows
    std::vector<std::vector<std::string>> rows = {
        {"Widget A", "120", "$2,400"},
        {"Widget B", "85",  "$1,700"},
    };
    for (size_t r = 0; r < rows.size(); ++r) {
        for (size_t c = 0; c < rows[r].size(); ++c) {
            table.rows()[r + 1][c].text_frame()->set_text(rows[r][c]);
        }
    }

    prs.save("table.pptx", asf::SaveFormat::PPTX);
    return 0;
}

Langkah 5: Tambah Penyambung

Penyambung menghubungkan dua bentuk secara visual. Buat bentuk terlebih dahulu, kemudian tambahkan penyambung dan tetapkan titik sambungan permulaan dan akhir.

#include <Aspose/Slides/Foss/presentation.h>

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;
    auto& slide = prs.slides()[0];

    auto& box1 = slide.shapes().add_auto_shape(
        asf::ShapeType::RECTANGLE, 50, 100, 150, 60);
    box1.text_frame()->set_text("Start");

    auto& box2 = slide.shapes().add_auto_shape(
        asf::ShapeType::RECTANGLE, 350, 100, 150, 60);
    box2.text_frame()->set_text("End");

    auto& conn = slide.shapes().add_connector(
        asf::ShapeType::BENT_CONNECTOR3, 0, 0, 10, 10);
    conn.set_start_shape_connected_to(&box1);
    conn.set_start_shape_connection_site_index(3); // right side of box1
    conn.set_end_shape_connected_to(&box2);
    conn.set_end_shape_connection_site_index(1);   // left side of box2

    prs.save("connector.pptx", asf::SaveFormat::PPTX);
    return 0;
}

Indeks tapak sambungan dinomborkan 0‑3 untuk segi empat tepat: atas=0, kiri=1, bawah=2, kanan=3.


Langkah 6: Tambah Bingkai Gambar

Benamkan imej dan tambahkan ke slaid sebagai PictureFrame. Baca bait imej terlebih dahulu, tambahkan ke koleksi imej persembahan, kemudian cipta bingkai.

#include <Aspose/Slides/Foss/presentation.h>
#include <fstream>
#include <vector>

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;

    std::ifstream file("logo.png", std::ios::binary);
    std::vector<uint8_t> data((std::istreambuf_iterator<char>(file)),
                               std::istreambuf_iterator<char>());

    auto& image = prs.images().add_image(data);

    auto& slide = prs.slides()[0];
    slide.shapes().add_picture_frame(
        asf::ShapeType::RECTANGLE, // bounding shape type
        50, 50,                    // x, y in points
        200, 150,                  // width, height in points
        image);

    prs.save("with-image.pptx", asf::SaveFormat::PPTX);
    return 0;
}

Isu Umum dan Penyelesaian

Bentuk muncul di luar kawasan slaid yang dapat dilihat

Slaid secara lalai berukuran 720 × 540 titik. Nilai x atau y yang melebihi sempadan tersebut menempatkan bentuk di luar slaid. Simpan x < 720 dan y < 540, dan pastikan x + width <= 720 dan y + height <= 540.

add_auto_shape() mengembalikan rujukan kepada objek yang telah dimusnahkan

Jangan simpan rujukan melebihi jangka hayat Presentation. Semua objek anak dimiliki oleh Presentation dan tidak sah apabila dimusnahkan.

Teks sel jadual kosong selepas penugasan

Kaedah yang betul ialah .text_frame()->set_text(). Akses sel sebagai table.rows()[row_index][col_index].text_frame()->set_text("value").


Soalan Lazim

Berapa banyak bentuk yang boleh saya tambahkan ke slaid?

Tiada had yang dikenakan oleh perpustakaan. Had praktikal bergantung pada saiz fail dan keupayaan rendering penonton PPTX sasaran anda.

Bolehkah saya mengubah kedudukan bentuk selepas menambahnya?

Ya. Objek shape yang dikembalikan oleh add_auto_shape() mempunyai kaedah set_x(), set_y(), set_width(), dan set_height():

shape.set_x(100);
shape.set_y(200);
shape.set_width(400);
shape.set_height(80);

Bolehkah saya menetapkan warna garisan bentuk (sempadan)?

Ya, melalui shape.line_format():

shape.line_format().fill_format().solid_fill_color().set_color(
    asf::Color::from_argb(255, 200, 0, 0));

Adakah carta disokong?

Tidak. Carta, SmartArt, dan objek OLE tidak dilaksanakan dalam edisi ini.


Lihat Juga

 Bahasa Melayu