Wie man Präsentationen in C++ speichert
Aspose.Slides FOSS for C++ speichert Präsentationen ausschließlich im .pptx‑Format mithilfe von prs.save(path, SaveFormat::PPTX). Dieser Leitfaden behandelt das korrekte Speicher‑Muster, das Speichern in einen anderen Pfad und häufige speicherbezogene Fehler.
Schritt-für-Schritt-Anleitung
Schritt 1: Bibliothek bauen 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 oder Erstellen einer Präsentation
Verwenden Sie die Stapelzuweisung, damit der Destruktor automatisch aufräumt. Rufen Sie save() auf, bevor das Objekt den Gültigkeitsbereich verlässt.
#include <Aspose/Slides/Foss/presentation.h>
int main() {
namespace asf = Aspose::Slides::Foss;
// Create new
{
asf::Presentation prs;
prs.save("new.pptx", asf::SaveFormat::PPTX);
}
// Open existing
{
asf::Presentation prs("input.pptx");
prs.save("output.pptx", asf::SaveFormat::PPTX);
}
return 0;
}Schritt 3: Nach allen Änderungen speichern
Platzieren Sie den save() Aufruf, nachdem alle Änderungen abgeschlossen sind, aber bevor der Presentation aus dem Gültigkeitsbereich geht.
#include <Aspose/Slides/Foss/presentation.h>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
auto& slide = prs.slides()[0];
auto& shape = slide.shapes().add_auto_shape(
asf::ShapeType::RECTANGLE, 50, 50, 300, 100);
shape.text_frame()->set_text("Hello, World!");
prs.save("output.pptx", asf::SaveFormat::PPTX);
return 0;
}Schritt 4: In einem anderen Pfad speichern
Geben Sie einen anderen Ausgabepfad an, um eine neue Datei zu erstellen, ohne das Original zu ändern:
asf::Presentation prs("template.pptx");
// modify ...
prs.save("customized.pptx", asf::SaveFormat::PPTX);Die template.pptx Datei wird nicht geändert; customized.pptx wird erstellt (oder überschrieben, falls sie bereits existiert).
Schritt 5: Ausgabe überprüfen
Nach dem Speichern prüfen Sie, ob die Datei existiert:
#include <filesystem>
#include <iostream>
auto output = std::filesystem::path("output.pptx");
std::cout << "Saved: " << std::filesystem::exists(output)
<< ", size: " << std::filesystem::file_size(output) << " bytes\n";Unterstütztes Speicherformat
| Format | Enum-Wert | Unterstützt |
|---|---|---|
| PPTX (Office Open XML) | SaveFormat::PPTX | Ja |
| N/A | Nein | |
| HTML | N/A | Nein |
| SVG | N/A | Nein |
| PNG / JPEG | N/A | Nein |
| ODP (OpenDocument) | N/A | Nein |
Nur PPTX wird unterstützt. Der Versuch, in einem anderen Format zu speichern, löst eine Ausnahme aus.
Häufige Probleme und Lösungen
Zugriff verweigert-Fehler beim Schreiben
Die Ausgabedatei ist in einer anderen Anwendung geöffnet (z. B. hat PowerPoint die Datei geöffnet). Schließen Sie die Datei in anderen Anwendungen, bevor Sie speichern.
Datei wird erstellt, ist aber leer oder beschädigt
Stellen Sie sicher, dass prs.save() aufgerufen wird, bevor das Objekt Presentation zerstört wird. Nach der Zerstörung wird der interne Zustand freigegeben und nachfolgende Aufrufe schlagen fehl oder erzeugen ungültige Ausgaben.
Ausnahme beim Speichern
Dies tritt auf, wenn versucht wird, ein anderes Speicherformat als PPTX zu verwenden, oder wenn beim Speichern ein nicht unterstütztes Feature (wie Diagramme oder Animationen) verwendet wird.
Häufig gestellte Fragen
Kann ich in dieselbe Datei speichern, die ich geöffnet habe?
Ja. Das Speichern im selben Pfad überschreibt die Originaldatei:
asf::Presentation prs("deck.pptx");
// modify ...
prs.save("deck.pptx", asf::SaveFormat::PPTX); // overwrites original
Kann ich in einen Speicherpuffer statt einer Datei speichern?
Das direkte Speichern in ein std::vector<uint8_t> oder std::ostream wird von der aktuellen API nicht unterstützt. Speichern Sie in einer temporären Datei und lesen Sie die Bytes:
#include <filesystem>
#include <fstream>
#include <vector>
auto tmp = std::filesystem::temp_directory_path() / "temp.pptx";
prs.save(tmp.string(), asf::SaveFormat::PPTX);
std::ifstream in(tmp, std::ios::binary);
std::vector<uint8_t> bytes((std::istreambuf_iterator<char>(in)),
std::istreambuf_iterator<char>());
std::filesystem::remove(tmp);Behält das Speichern Inhalte bei, die ich nicht geändert habe?
Ja. Unbekannte XML‑Teile aus der Originaldatei werden 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.