Cara Memuat Presentasi di C++

Cara Memuat Presentasi di C++

Aspose.Slides FOSS for C++ lets you open any .pptx file, periksa isinya, dan baik menyimpannya kembali ke PPTX atau mengekstrak data darinya. Panduan ini mencakup membuka file, mengiterasi slide, membaca teks shape, dan round‑tripping penyimpanan.

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: Buka Presentasi yang Ada

Berikan jalur file ke Presentation konstruktor. Destructor menangani pembersihan.

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

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs("input.pptx");
    std::cout << "Slide count: " << prs.slides().size() << "\n";
    prs.save("output.pptx", asf::SaveFormat::PPTX);
    return 0;
}

Bagian XML yang tidak dikenal dalam file sumber dipertahankan secara verbatim: perpustakaan tidak pernah menghapus konten yang belum dipahaminya.


Langkah 3: Periksa Slide

Iterasi semua slide dan cetak jumlah bentuknya:

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

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs("deck.pptx");
    for (size_t i = 0; i < prs.slides().size(); ++i) {
        auto& slide = prs.slides()[i];
        std::cout << "Slide " << i << ": "
                  << slide.shapes().size() << " shapes\n";
    }
    return 0;
}

Langkah 4: Baca Teks Bentuk

Iterasi shape dan baca teks dari shape yang memiliki TextFrame:

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

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs("deck.pptx");
    for (size_t i = 0; i < prs.slides().size(); ++i) {
        auto& slide = prs.slides()[i];
        for (size_t j = 0; j < slide.shapes().size(); ++j) {
            auto& shape = slide.shapes()[j];
            if (shape.has_text_frame()) {
                auto text = shape.text_frame()->text();
                if (!text.empty()) {
                    std::cout << "  Shape text: " << text << "\n";
                }
            }
        }
    }
    return 0;
}

Langkah 5: Baca Properti Dokumen

Akses properti dokumen inti dari prs.document_properties():

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

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs("deck.pptx");
    auto& props = prs.document_properties();
    std::cout << "Title:   " << props.title() << "\n";
    std::cout << "Author:  " << props.author() << "\n";
    std::cout << "Subject: " << props.subject() << "\n";
    return 0;
}

Langkah 6: Simpan Secara Round-Trip

Setelah memeriksa atau memodifikasi presentasi, simpan kembali ke PPTX:

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

Menyimpan ke jalur yang berbeda membuat file baru. Menyimpan ke jalur yang sama menimpa file asli.


Masalah Umum dan Solusinya

File tidak ditemukan atau tidak dapat dibuka

Periksa bahwa jalur ke .pptx file sudah benar relatif terhadap direktori kerja. Gunakan std::filesystem::path untuk konstruksi jalur yang kuat:

#include <filesystem>
auto path = std::filesystem::path(__FILE__).parent_path() / "assets" / "deck.pptx";
asf::Presentation prs(path.string());

Pengecualian: Format file tidak didukung

Perpustakaan ini mendukung .pptx (Office Open XML) saja. Legacy .ppt (binary PowerPoint 97-2003) tidak didukung.

Bentuk tidak memiliki text_frame

Beberapa shape (Connectors, PictureFrames, GroupShapes) tidak memiliki frame teks. Lindungi dengan shape.has_text_frame() sebelum mengakses teks.


Pertanyaan yang Sering Diajukan

Apakah pemuatan mempertahankan semua konten asli?

Ya. Bagian XML yang tidak dikenal dipertahankan persis pada penyimpanan putar-balik. Perpustakaan hanya menserialisasi bagian model dokumen yang dipahaminya, dan meneruskan XML apa pun yang tidak dikenalnya.

Bisakah saya memuat PPTX yang dilindungi kata sandi?

Presentasi yang dilindungi kata sandi (terenkripsi) tidak didukung dalam edisi ini.

Bisakah saya mengekstrak gambar yang disematkan?

Akses koleksi gambar: prs.images() mengembalikan ImageCollection. Setiap gambar memiliki a width(), height(), dan binary_data() metode untuk membaca data gambar mentah.

Apakah pemuatan dari buffer dalam memori didukung?

Memuat dari sebuah std::vector<uint8_t> atau std::istream tidak diekspos dalam API saat ini. Tulis byte ke file sementara terlebih dahulu, kemudian berikan jalur ke Presentation konstruktor.


Lihat Juga

 Bahasa Indonesia