Cara Menambahkan Bentuk ke PowerPoint dengan C++

Cara Menambahkan Bentuk ke PowerPoint dengan C++

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

Panduan Langkah-demi-Langkah

Langkah 1: Bangun dan Tautkan 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 Presentasi

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: Tambahkan AutoShape

slide.shapes().add_auto_shape(shape_type, x, y, width, height) menempatkan sebuah bentuk pada posisi dan ukuran yang diberikan (semua dalam poin). Gunakan konstanta 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: Tambahkan Tabel

slide.shapes().add_table(x, y, col_widths, row_heights) membuat tabel pada posisi yang ditentukan. Lebar kolom dan tinggi baris adalah vektor nilai poin.

#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: Tambahkan Konektor

Penghubung menghubungkan dua bentuk secara visual. Buat bentuk terlebih dahulu, lalu tambahkan penghubung dan atur titik koneksi awal serta 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 situs koneksi diberi nomor 0-3 untuk sebuah persegi panjang: atas=0, kiri=1, bawah=2, kanan=3.


Langkah 6: Tambahkan Bingkai Gambar

Sematkan gambar dan tambahkan ke slide sebagai PictureFrame. Baca byte gambar terlebih dahulu, tambahkan ke koleksi gambar presentasi, kemudian buat 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;
}

Masalah Umum dan Solusi

Bentuk muncul di luar area slide yang terlihat

Slide berukuran 720 × 540 poin secara default. Nilai x atau y di luar batas tersebut menempatkan bentuk di luar slide. Pertahankan x < 720 dan y < 540, serta pastikan x + width <= 720 dan y + height <= 540.

add_auto_shape() mengembalikan referensi ke objek yang telah dihancurkan

Jangan menyimpan referensi di luar masa hidup Presentation. Semua objek anak dimiliki oleh Presentation dan menjadi tidak valid pada saat penghancuran.

Teks sel tabel kosong setelah penugasan

Metode yang benar adalah .text_frame()->set_text(). Akses sel sebagai table.rows()[row_index][col_index].text_frame()->set_text("value").


Pertanyaan yang Sering Diajukan

Berapa banyak bentuk yang dapat saya tambahkan ke slide?

Tidak ada batasan yang diberlakukan oleh perpustakaan. Batasan praktis tergantung pada ukuran file dan kemampuan rendering penampil PPTX target Anda.

Bisakah saya mengubah posisi shape setelah menambahkannya?

Ya. Objek shape yang dikembalikan oleh add_auto_shape() memiliki metode 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);

Bisakah saya mengatur warna garis luar (border) bentuk?

Ya, melalui shape.line_format():

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

Apakah grafik didukung?

Tidak. Diagram, SmartArt, dan objek OLE tidak diimplementasikan dalam edisi ini.


Lihat Juga

 Bahasa Indonesia