Com carregar presentacions en C++
Aspose.Slides FOSS per a C++ us permet obrir qualsevol fitxer .pptx, inspeccionar-ne el contingut i, o bé, desar-lo de nou a PPTX o extreure’n 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 de desar i tornar a carregar.
Guia pas a pas
Pas 1: Compila i enllaça 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 constructor Presentation. 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 al fitxer font 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: Llegir el text de la forma
Itera sobre les formes i llegeix 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: Llegir les propietats del document
Accediu a les propietats bàsiques 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: Desar en viatge d’anada i tornada
Després d’inspeccionar o modificar la presentació, deseu-la de nou a PPTX:
prs.save("output.pptx", asf::SaveFormat::PPTX);Desar a una ruta diferent crea un fitxer nou. Desar a la mateixa ruta sobrescriu l’original.
Problemes comuns i solucions
Fitxer no trobat o no es pot obrir
Comproveu que el camí cap al fitxer .pptx sigui correcte respecte al directori de treball. Utilitzeu std::filesystem::path per a una construcció de camins robusta:
#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 només admet .pptx (Office Open XML). Els fitxers obsolets .ppt (PowerPoint binari 97-2003) no són compatibles.
Shape no té text_frame
Algunes formes (Connectors, PictureFrames, GroupShapes) no tenen un marc de text. Protegiu 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 de viatge d’anada i tornada. La biblioteca només serialitza les parts del model de document que entén i passa a través de qualsevol XML que no reconeix.
Puc carregar un PPTX protegit amb contrasenya?
Les presentacions protegides per 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 mètode width(), height() i binary_data() per llegir les dades d’imatge en brut.
És compatible la càrrega des d’un buffer en memòria?
Carregar des d’un std::vector<uint8_t> o std::istream no està exposat a l’API actual. Escriu els bytes a un fitxer temporal primer, i després passa el camí al constructor Presentation.