Com carregar presentacions en C++
Aspose.Slides FOSS for C++ lets you open any .pptx fitxer, inspeccioneu el seu contingut i deseu-lo de nou a PPTX o extraieu-ne dades. Aquesta guia cobreix l’obertura d’un fitxer, la iteració de les diapositives, la lectura del text de les formes i el procés d’anar i tornar del desament.
Guia pas a pas
Pas 1: Compilar i enllaçar la biblioteca
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 .Pas 2: Obre una presentació existent
Passeu la ruta del fitxer al Presentation constructor. El destructor s’encarrega de la neteja.
#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;
}Les parts XML desconegudes del fitxer d’origen es conserven literalment: la biblioteca mai elimina contingut que encara no entén.
Pas 3: Inspecciona les diapositives
Itera sobre totes les diapositives i imprimeix el nombre de formes:
#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;
}Pas 4: Llegeix el text de les formes
Itereu sobre les formes i llegiu el text de les formes que tenen un 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;
}Pas 5: Llegeix les propietats del document
Accediu a les propietats principals del document des de 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;
}Pas 6: Desament d’anar i tornar
Després d’inspeccionar o modificar la presentació, desa-la de nou a PPTX:
prs.save("output.pptx", asf::SaveFormat::PPTX);Desar a un camí diferent crea un fitxer nou. Desar al mateix camí sobrescriu l’original.
Problemes comuns i solucions
Fitxer no trobat o no es pot obrir
Comproveu que la ruta cap al .pptx fitxer és correcta respecte al directori de treball. Utilitzeu std::filesystem::path per a una construcció robusta de rutes:
#include <filesystem>
auto path = std::filesystem::path(__FILE__).parent_path() / "assets" / "deck.pptx";
asf::Presentation prs(path.string());Excepció: El format de fitxer no és compatible
La biblioteca admet .pptx (Office Open XML) només. Les antigues .ppt fitxers (PowerPoint binari 97-2003) no són compatibles.
Shape no té text_frame
Algunes formes (Connectors, PictureFrames, GroupShapes) no tenen un marc de text. Comproveu amb shape.has_text_frame() abans d’accedir al text.
Preguntes freqüents
La càrrega conserva tot el contingut original?
Sí. Les parts XML desconegudes es conserven literalment en el desament d’anada i tornada. La biblioteca només serialitza les parts del model del document que entén i transmet sense modificar cap XML que no reconeix.
Puc carregar un PPTX protegit per contrasenya?
Les presentacions protegides amb contrasenya (encriptades) no són compatibles en aquesta edició.
Puc extreure imatges incrustades?
Accediu a la col·lecció d’imatges: prs.images() retorna el ImageCollection. Cada imatge té un width(), height(), i binary_data() mètode per llegir les dades d’imatge en brut.
Es compatible la càrrega des d’un buffer en memòria?
Carregant des d’un std::vector<uint8_t> o std::istream no està exposat a l’API actual. Escriviu els bytes a un fitxer temporal primer, i després passeu el camí al Presentation constructor.