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.