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.