Prezentációk betöltése C++-ban

Prezentációk betöltése C++-ban

Aspose.Slides FOSS for C++ lets you open any .pptx fájlt, ellenőrizze a tartalmát, és vagy mentse vissza PPTX formátumba, vagy nyerjen ki adatot belőle. Ez az útmutató lefedi a fájl megnyitását, a diák iterálását, az alakzat szövegének olvasását, és a mentés körkörös visszaállítását.

Lépésről-lépésre útmutató

1. lépés: A könyvtár felépítése és linkelése

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 .

2. lépés: Meglévő prezentáció megnyitása

Adja át a fájl útvonalát a Presentation konstruktorának. A destruktor kezeli a takarítást.

#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;
}

Az ismeretlen XML részek a forrásfájlban szó szerint megmaradnak: a könyvtár soha nem távolít el olyan tartalmat, amelyet még nem ért meg.


3. lépés: Diák vizsgálata

Iteráljon az összes dián, és írja ki az alakzatok számát:

#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;
}

4. lépés: Alakzat szövegének olvasása

Iteráljon az alakzatokon, és olvassa a szöveget azokból az alakzatokból, amelyek rendelkeznek egy 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;
}

5. lépés: Dokumentumtulajdonságok olvasása

Hozzáférés a magdokumentum tulajdonságaihoz a 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;
}

6. lépés: Körkörös mentés

A prezentáció vizsgálata vagy módosítása után mentse vissza PPTX formátumba:

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

Másik útvonalra mentés új fájlt hoz létre. Ugyanarra az útvonalra mentés felülírja az eredetit.


Gyakori problémák és megoldások

A fájl nem található vagy nem nyitható meg

Ellenőrizze, hogy az útvonal a .pptx fájlra helyes-e a munkakönyvtárhoz képest. Használja a std::filesystem::path a robusztus útvonalépítéshez:

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

Kivétel: A fájlformátum nem támogatott

A könyvtár támogatja a .pptx (Office Open XML) csak. A régi .ppt (bináris PowerPoint 97-2003) fájlok nem támogatottak.

Shape has no text_frame

Néhány alakzat (Kapcsolók, Képkockák, CsoportosAlakzatok) nem rendelkezik szövegkerettel. Védekezzen a shape.has_text_frame() használatával, mielőtt a szöveghez hozzáférne.


Gyakran Ismételt Kérdések

A betöltés megőrzi az összes eredeti tartalmat?

Igen. Az ismeretlen XML részek szó szerint megmaradnak a körkörös mentés során. A könyvtár csak a dokumentummodell által ismert részeket sorosítja, és átengedi a nem felismert XML-t.

Betölthetek jelszóval védett PPTX fájlt?

A jelszóval védett (titkosított) prezentációk nem támogatottak ebben a kiadásban.

Kivonhatok beágyazott képeket?

A képek gyűjteményéhez való hozzáférés: prs.images() visszaadja a ImageCollection. Minden kép rendelkezik egy width(), height(), és binary_data() módszer a nyers képadatok olvasásához.

Támogatott a betöltés memóriában lévő pufferből?

Betöltés egy std::vector<uint8_t> vagy std::istream nem érhető el a jelenlegi API-ban. Írja a bájtokat először egy ideiglenes fájlba, majd adja át az útvonalat a Presentation konstruktorának.


Lásd még

 Magyar