Cara Membuat Pembentangan dalam C++
Aspose.Slides FOSS for C++ membolehkan anda membuat persembahan PowerPoint sepenuhnya dalam C++ tanpa kebergantungan pada Microsoft Office. Panduan ini menunjukkan cara membuat persembahan baru, menambah slaid dan bentuk, memformat teks, dan menyimpan hasilnya.
Panduan Langkah demi Langkah
Langkah 1: Tambah Perpustakaan ke Projek CMake Anda
Gunakan CMake FetchContent untuk mengintegrasikan perpustakaan secara langsung dari GitHub. C++20 atau lebih baru diperlukan.
cmake_minimum_required(VERSION 3.20)
project(my_slides_app LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
include(FetchContent)
FetchContent_Declare(
aspose_slides_foss
GIT_REPOSITORY https://github.com/aspose-slides-foss/Aspose.Slides-FOSS-for-Cpp.git
GIT_TAG main
)
FetchContent_MakeAvailable(aspose_slides_foss)
add_executable(my_app main.cpp)
target_link_libraries(my_app PRIVATE aspose_slides_foss)Tiada pakej sistem lain diperlukan.
Langkah 2: Sertakan Header yang Diperlukan
#include <Aspose/Slides/Foss/presentation.h>Semua jenis berada dalam ruang nama Aspose::Slides::Foss. Untuk memendekkan, contoh-contoh di bawah menggunakan alias ruang nama:
namespace asf = Aspose::Slides::Foss;Langkah 3: Buat Persembahan
Bina Presentation pada timbunan. Persembahan baru bermula dengan satu slaid kosong.
#include <Aspose/Slides/Foss/presentation.h>
#include <iostream>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
std::cout << "Slides in new presentation: " << prs.slides().size() << "\n";
prs.save("output.pptx", asf::SaveFormat::PPTX);
return 0;
}Penting: Gunakan peruntukan timbunan atau std::unique_ptr supaya pemusnah melepaskan sumber dalaman secara automatik.
Langkah 4: Akses Slaid
Slaid pertama berada pada indeks 0. Persembahan kosong mempunyai tepat satu slaid.
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
auto& slide = prs.slides()[0]; // zero-based index
prs.save("output.pptx", asf::SaveFormat::PPTX);Langkah 5: Tambah Bentuk
Gunakan slide.shapes().add_auto_shape() untuk menambah AutoShape. Parameter ialah (shape_type, x, y, width, height) semua dalam titik (1 titik = 1/72 inci; slaid standard ialah 720 × 540 pt).
#include <Aspose/Slides/Foss/presentation.h>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
auto& slide = prs.slides()[0];
// Rectangle at (50, 50) with 400 wide and 120 tall
auto& shape = slide.shapes().add_auto_shape(
asf::ShapeType::RECTANGLE, 50, 50, 400, 120);
// Set text on the shape's text frame
shape.text_frame()->set_text("Hello from Aspose.Slides FOSS!");
prs.save("with-shape.pptx", asf::SaveFormat::PPTX);
return 0;
}Langkah 6: Simpan Persembahan
Panggil prs.save(path, SaveFormat::PPTX) sebelum Presentation keluar dari skop. PPTX ialah satu-satunya format output yang disokong.
prs.save("result.pptx", asf::SaveFormat::PPTX);Fail ditulis secara atomik; jika ralat berlaku sebelum panggilan ini, tiada fail output yang dibuat.
Contoh Kerja Lengkap
Program berikut menghasilkan persembahan dua slaid dengan bentuk tajuk pada slaid pertama dan jadual pada slaid kedua.
#include <Aspose/Slides/Foss/presentation.h>
#include <vector>
#include <string>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
// --- Slide 1: title shape ---
auto& slide1 = prs.slides()[0];
auto& title = slide1.shapes().add_auto_shape(
asf::ShapeType::RECTANGLE, 40, 40, 640, 80);
title.text_frame()->set_text("Q1 Results: Executive Summary");
auto& fmt = title.text_frame()->paragraphs()[0].portions()[0].portion_format();
fmt.set_font_height(32);
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));
// --- Slide 2: table ---
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
auto& slide2 = prs.slides()[1];
std::vector<double> col_w = {200.0, 120.0, 120.0};
std::vector<double> row_h = {40.0, 40.0, 40.0};
auto& table = slide2.shapes().add_table(40, 40, col_w, row_h);
std::vector<std::string> headers = {"Region", "Revenue", "Growth"};
std::vector<std::vector<std::string>> data = {
{"North", "$1.2M", "+8%"},
{"South", "$0.9M", "+4%"},
};
for (size_t col = 0; col < headers.size(); ++col) {
table.rows()[0][col].text_frame()->set_text(headers[col]);
}
for (size_t r = 0; r < data.size(); ++r) {
for (size_t c = 0; c < data[r].size(); ++c) {
table.rows()[r + 1][c].text_frame()->set_text(data[r][c]);
}
}
prs.save("q1-results.pptx", asf::SaveFormat::PPTX);
return 0;
}Isu Umum dan Penyelesaian
Segfault atau double-free pada pemusnahan Presentation
Anda menyimpan rujukan atau penunjuk kepada slaid atau bentuk selepas Presentation telah dimusnahkan. Semua rujukan yang dikembalikan oleh slides(), shapes(), dll. menjadi tidak sah apabila pemusnah Presentation dijalankan. Pastikan Presentation tetap hidup sepanjang tempoh anda menggunakan objek anaknya.
SaveFormat::PPTX is not a function ralat penyusun
SaveFormat::PPTX adalah nilai enum, bukan fungsi. Gunakan ia sebagai prs.save("file.pptx", asf::SaveFormat::PPTX).
Ralat linker: rujukan tidak ditakrifkan kepada Aspose::Slides::Foss::Presentation
Pastikan CMakeLists.txt anda menautkan ke perpustakaan dengan target_link_libraries(my_app PRIVATE aspose_slides_foss).
Soalan Lazim
Apakah saiz slaid lalai?
Satu Presentation() baru mencipta slaid pada saiz standard 10 × 7.5 inci (720 × 540 point). Menukar saiz slaid belum disokong dalam edisi ini.
Bolehkah saya menambah lebih daripada satu slaid?
Ya. Panggil prs.slides().add_empty_slide(&prs.layout_slides()[0]) untuk menambah slaid kosong dan mengaksesnya mengikut indeks:
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
auto& slide2 = prs.slides()[1];Bolehkah saya membuka fail sedia ada dan menambah slaid?
Ya:
asf::Presentation prs("existing.pptx");
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
prs.save("existing.pptx", asf::SaveFormat::PPTX);Format apa yang boleh saya simpan?
Hanya SaveFormat::PPTX disokong. Eksport ke PDF, HTML, SVG, atau imej tidak tersedia dalam edisi ini.