Wie man Präsentationen in C++ lädt
Aspose.Slides FOSS für C++ ermöglicht das Öffnen jeder .pptx‑Datei, das Inspizieren ihres Inhalts und entweder das Zurückspeichern als PPTX oder das Extrahieren von Daten daraus. Dieser Leitfaden behandelt das Öffnen einer Datei, das Durchlaufen von Folien, das Lesen von Formtexten und das Round‑Trip‑Speichern.
Schritt-für-Schritt-Anleitung
Schritt 1: Bibliothek erstellen und verlinken
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 .Schritt 2: Öffnen einer vorhandenen Präsentation
Übergeben Sie den Dateipfad an den Presentation‑Konstruktor. Der Destruktor übernimmt die Bereinigung.
#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;
}Unbekannte XML‑Teile in der Quelldatei werden unverändert beibehalten: Die Bibliothek entfernt niemals Inhalte, die sie noch nicht versteht.
Schritt 3: Folien prüfen
Iteriere über alle Folien und gib deren Formanzahl aus:
#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;
}Schritt 4: Shape‑Text lesen
Iterieren Sie über Formen und lesen Sie den Text aus Formen, die ein TextFrame enthalten:
#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;
}Schritt 5: Dokumenteigenschaften lesen
Zugriff auf Kerndokumenteigenschaften von 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;
}Schritt 6: Round‑Trip‑Speichern
Nachdem Sie die Präsentation überprüft oder geändert haben, speichern Sie sie zurück in PPTX:
prs.save("output.pptx", asf::SaveFormat::PPTX);Das Speichern an einem anderen Pfad erstellt eine neue Datei. Das Speichern am selben Pfad überschreibt das Original.
Häufige Probleme und Lösungen
Datei nicht gefunden oder kann nicht geöffnet werden
Überprüfen Sie, ob der Pfad zur .pptx‑Datei relativ zum Arbeitsverzeichnis korrekt ist. Verwenden Sie std::filesystem::path für eine robuste Pfadkonstruktion:
#include <filesystem>
auto path = std::filesystem::path(__FILE__).parent_path() / "assets" / "deck.pptx";
asf::Presentation prs(path.string());Ausnahme: Dateiformat wird nicht unterstützt
Die Bibliothek unterstützt nur .pptx (Office Open XML). Legacy .ppt (binäre PowerPoint 97‑2003)-Dateien werden nicht unterstützt.
Shape hat keinen text_frame
Einige Formen (Connectors, PictureFrames, GroupShapes) haben keinen Textrahmen. Schützen Sie den Zugriff mit shape.has_text_frame(), bevor Sie auf den Text zugreifen.
Häufig gestellte Fragen
Bewahrt das Laden den gesamten Originalinhalt?
Ja. Unbekannte XML‑Teile werden beim Round‑Trip‑Speichern unverändert beibehalten. Die Bibliothek serialisiert nur die Teile des Dokumentmodells, die sie versteht, und lässt jedes XML, das sie nicht erkennt, unverändert durch.
Kann ich eine passwortgeschützte PPTX laden?
Passwortgeschützte (verschlüsselte) Präsentationen werden in dieser Ausgabe nicht unterstützt.
Kann ich eingebettete Bilder extrahieren?
Greifen Sie auf die Bildersammlung zu: prs.images() gibt das ImageCollection zurück. Jedes Bild verfügt über die Methoden width(), height() und binary_data(), um die Rohbilddaten zu lesen.
Wird das Laden aus einem In-Memory-Puffer unterstützt?
Das Laden von einem std::vector<uint8_t> oder std::istream ist in der aktuellen API nicht verfügbar. Schreiben Sie die Bytes zunächst in eine temporäre Datei und übergeben Sie dann den Pfad an den Presentation‑Konstruktor.