Cara Memuatkan Pembentangan dalam C++

Cara Memuatkan Pembentangan dalam C++

Aspose.Slides FOSS untuk C++ membolehkan anda membuka mana-mana fail .pptx, memeriksa kandungannya, dan sama ada menyimpannya kembali ke PPTX atau mengekstrak data daripadanya. Panduan ini merangkumi cara membuka fail, mengulangi slaid, membaca teks bentuk, dan menyimpan semula secara pusingan.

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

Berikan laluan fail kepada konstruktor Presentation. Penghancur mengendalikan 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 diketahui 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 dokumen teras 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

Selepas memeriksa atau mengubah suai persembahan, simpan semula ke PPTX:

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

Menyimpan ke laluan yang berbeza mencipta fail baru. Menyimpan ke laluan yang sama menimpa fail asal.


Masalah Biasa dan Penyelesaian

Fail tidak dijumpai atau tidak dapat dibuka

Periksa bahawa laluan ke fail .pptx 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

Perpustakaan menyokong .pptx (Office Open XML) sahaja. Fail .ppt (PowerPoint binari 97-2003) warisan 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 diketahui dipelihara secara verbatim semasa simpanan pusingan. Perpustakaan hanya menserialkan bahagian model dokumen yang difahaminya, dan membenarkan mana-mana XML yang tidak dikenali melaluinya.

Bolehkah saya memuatkan PPTX yang dilindungi kata laluan?

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

Bolehkah saya mengekstrak imej terbenam?

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

Adakah pemuatan daripada penampan dalam memori disokong?

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


Lihat Juga

 Bahasa Melayu