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.