Cara Memuat Persembahan dalam C++

Cara Memuat Persembahan dalam C++

Aspose.Slides FOSS for C++ lets you open any .pptx fail, periksa kandungannya, dan sama ada simpan semula ke PPTX atau ekstrak data daripadanya. Panduan ini merangkumi membuka fail, mengiterasi slaid, membaca teks bentuk, dan menyimpan semula secara round‑tripping.

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: Buka Persembahan Sedia Ada

Hantar laluan fail kepada Presentation pembina. Penghancur mengurus 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;
}

Bahagian XML yang tidak dikenali dalam fail sumber dipelihara secara verbatim: perpustakaan tidak pernah mengeluarkan kandungan yang belum difahaminya.


Langkah 3: Periksa Slaid

Ulangi semua slaid dan cetak kiraan bentuk mereka:

#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 ke atas bentuk dan baca teks daripada bentuk yang mempunyai 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 Sifat Dokumen

Akses sifat teras dokumen 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 Pusingan Balik

Selepas memeriksa atau mengubah persembahan, simpan kembali ke PPTX:

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

Menyimpan ke laluan yang berbeza akan mencipta fail baru. Menyimpan ke laluan yang sama akan menulis ganti fail asal.


Isu Umum dan Penyelesaian

Fail tidak dijumpai atau tidak dapat dibuka

Semak bahawa laluan ke .pptx fail adalah betul relatif kepada direktori kerja. Gunakan std::filesystem::path untuk pembinaan laluan yang kukuh:

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

Pengecualian: Format fail tidak disokong

Pustaka menyokong .pptx (Office Open XML) sahaja. Legasi .ppt (binary PowerPoint 97-2003) tidak disokong.

Bentuk tidak mempunyai text_frame

Beberapa bentuk (Connectors, PictureFrames, GroupShapes) tidak mempunyai bingkai teks. Lindungi dengan shape.has_text_frame() sebelum mengakses teks.


Soalan Lazim

Adakah pemuatan mengekalkan semua kandungan asal?

Ya. Bahagian XML yang tidak dikenali disimpan secara verbatim semasa simpan pusingan balik. Pustaka hanya menserialkan bahagian model dokumen yang difahaminya, dan meneruskan sebarang XML yang tidak dikenali.

Bolehkah saya memuatkan PPTX yang dilindungi kata laluan?

Pembentangan yang dilindungi kata laluan (dienkripsi) tidak disokong dalam edisi ini.

Bolehkah saya mengekstrak imej terbenam?

Akses koleksi imej: prs.images() mengembalikan ImageCollection. Setiap imej mempunyai a width(), height(), dan binary_data() kaedah untuk membaca data imej mentah.

Adakah pemuatan dari penampan dalam memori disokong?

Memuatkan dari satu std::vector<uint8_t> atau std::istream tidak didedahkan dalam API semasa. Tulis bait ke fail sementara terlebih dahulu, kemudian serahkan laluan kepada Presentation konstruktor.


Lihat Juga

 Bahasa Melayu