Cara Membuat Presentasi dalam C++

Cara Membuat Presentasi dalam C++

Aspose.Slides FOSS for C++ memungkinkan Anda membuat presentasi PowerPoint sepenuhnya dalam C++ tanpa ketergantungan pada Microsoft Office. Panduan ini menunjukkan cara membuat presentasi baru, menambahkan slide dan bentuk, memformat teks, dan menyimpan hasilnya.

Panduan Langkah-demi-Langkah

Langkah 1: Tambahkan Perpustakaan ke Proyek CMake Anda

Gunakan CMake FetchContent untuk mengintegrasikan pustaka langsung dari GitHub. C++20 atau yang 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)

Tidak ada paket sistem lain yang diperlukan.


Langkah 2: Sertakan Header yang Diperlukan

#include <Aspose/Slides/Foss/presentation.h>

Semua tipe berada di namespace Aspose::Slides::Foss. Untuk singkat, contoh di bawah menggunakan alias namespace:

namespace asf = Aspose::Slides::Foss;

Langkah 3: Buat Presentasi

Bangun sebuah Presentation pada tumpukan. Presentasi baru dimulai dengan satu slide 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 alokasi stack atau std::unique_ptr sehingga destruktor melepaskan sumber daya internal secara otomatis.


Langkah 4: Akses Slide

Slide pertama berada pada indeks 0. Presentasi kosong memiliki tepat satu slide.

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

Gunakan slide.shapes().add_auto_shape() untuk menambahkan AutoShape. Parameter‑nya adalah (shape_type, x, y, width, height) semua dalam poin (1 poin = 1/72 inci; slide standar berukuran 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 Presentasi

Panggil prs.save(path, SaveFormat::PPTX) sebelum Presentation keluar dari ruang lingkup. PPTX adalah satu-satunya format output yang didukung.

prs.save("result.pptx", asf::SaveFormat::PPTX);

File ditulis secara atomik; jika terjadi kesalahan sebelum pemanggilan ini, tidak ada file output yang dibuat.


Contoh Kerja Lengkap

Program berikut membuat presentasi dua slide dengan bentuk judul pada slide pertama dan tabel pada slide 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;
}

Masalah Umum dan Solusi

Segfault atau double-free pada penghancuran Presentation

Anda menyimpan referensi atau pointer ke slide atau shape setelah Presentation dihancurkan. Semua referensi yang dikembalikan oleh slides(), shapes(), dll. menjadi tidak valid ketika destruktor Presentation dijalankan. Jaga agar Presentation tetap hidup selama seluruh durasi Anda menggunakan objek anaknya.

SaveFormat::PPTX is not a function kesalahan kompilator

SaveFormat::PPTX adalah nilai enum, bukan fungsi. Gunakan itu sebagai prs.save("file.pptx", asf::SaveFormat::PPTX).

Kesalahan linker: referensi tidak terdefinisi ke Aspose::Slides::Foss::Presentation

Pastikan CMakeLists.txt Anda menautkan ke pustaka dengan target_link_libraries(my_app PRIVATE aspose_slides_foss).


Pertanyaan yang Sering Diajukan

Berapa ukuran slide default?

Sebuah Presentation() baru membuat slide dengan ukuran standar 10 × 7,5 inci (720 × 540 poin). Mengubah ukuran slide belum didukung dalam edisi ini.

Bisakah saya menambahkan lebih dari satu slide?

Ya. Panggil prs.slides().add_empty_slide(&prs.layout_slides()[0]) untuk menambahkan slide kosong dan mengaksesnya dengan indeks:

prs.slides().add_empty_slide(&prs.layout_slides()[0]);
auto& slide2 = prs.slides()[1];

Bisakah saya membuka file yang ada dan menambahkan slide?

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 dapat saya simpan?

Hanya SaveFormat::PPTX yang didukung. Ekspor ke PDF, HTML, SVG, atau gambar tidak tersedia dalam edisi ini.


Lihat Juga

 Bahasa Indonesia