Cum să încărcați prezentări în C++
Aspose.Slides FOSS for C++ vă permite să deschideți orice fișier .pptx, să inspectați conținutul său și fie să îl salvați înapoi în PPTX, fie să extrageți date din el. Acest ghid acoperă deschiderea unui fișier, iterarea diapozitivelor, citirea textului formei și salvarea round‑trip.
Ghid pas cu pas
Pasul 1: Construiește și leagă 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 .Pasul 2: Deschide o prezentare existentă
Transmite calea fișierului către constructorul Presentation. Destructorul se ocupă de curățare.
#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;
}Părțile XML necunoscute din fișierul sursă sunt păstrate literalmente: biblioteca nu elimină niciodată conținutul pe care nu îl înțelege încă.
Pasul 3: Inspectaţi diapozitivele
Iterați prin toate diapozitivele și afișați numărul de forme:
#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;
}Pasul 4: Citește textul formei
Iterați peste forme și citiți textul din formele care au 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;
}Pasul 5: Citește proprietățile documentului
Accesați proprietățile de bază ale documentului din 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;
}Pasul 6: Salvare round‑trip
După inspectarea sau modificarea prezentării, salvați-o înapoi în PPTX:
prs.save("output.pptx", asf::SaveFormat::PPTX);Salvarea într-o cale diferită creează un fișier nou. Salvarea în aceeași cale suprascrie originalul.
Probleme comune și soluții
Fișierul nu a fost găsit sau nu poate fi deschis
Verificați că calea către fișierul .pptx este corectă în raport cu directorul de lucru. Utilizați std::filesystem::path pentru construcția robustă a căii:
#include <filesystem>
auto path = std::filesystem::path(__FILE__).parent_path() / "assets" / "deck.pptx";
asf::Presentation prs(path.string());Excepție: formatul fișierului nu este acceptat
Biblioteca acceptă doar .pptx (Office Open XML). Fișierele vechi .ppt (PowerPoint binar 97-2003) nu sunt acceptate.
Forma nu are text_frame
Unele forme (Connectors, PictureFrames, GroupShapes) nu au un cadru de text. Protejați cu shape.has_text_frame() înainte de a accesa textul.
Întrebări frecvente
Încărcarea păstrează tot conținutul original?
Da. Părțile XML necunoscute sunt păstrate literalmente la salvarea în buclă. Biblioteca serializează doar părțile modelului de document pe care le înțelege și trece prin orice XML pe care nu îl recunoaște.
Pot încărca un PPTX protejat prin parolă?
Prezentările protejate prin parolă (criptate) nu sunt acceptate în această ediție.
Pot să extrag imagini încorporate?
Accesați colecția de imagini: prs.images() returnează ImageCollection. Fiecare imagine are o metodă width(), height() și binary_data() pentru a citi datele brute ale imaginii.
Este suportată încărcarea dintr-un buffer în memorie?
Încărcarea dintr-un std::vector<uint8_t> sau std::istream nu este expusă în API-ul curent. Scrieți octeții într-un fișier temporar mai întâi, apoi transmiteți calea către constructorul Presentation.