Cara Membuat Pembentangan dalam C++

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.


Lihat Juga

 Bahasa Melayu