Wie man Präsentationen in C++ speichert
Aspose.Slides FOSS for C++ saves presentations exclusively to .pptx Format verwenden 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: Präsentation öffnen oder erstellen
Verwenden Sie die Stapelzuweisung, damit der Destruktor automatisch aufräumt. Rufen Sie save() 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 das save() Aufruf, nachdem alle Änderungen abgeschlossen sind, aber bevor das Presentation den Gültigkeitsbereich verlässt.
#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 einen anderen Pfad speichern
Geben Sie einen anderen Ausgabepfad an, um eine neue Datei zu erstellen, ohne das Original zu verändern:
asf::Presentation prs("template.pptx");
// modify ...
prs.save("customized.pptx", asf::SaveFormat::PPTX);Der 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
Fehler „Zugriff verweigert“ beim Schreiben
Die Ausgabedatei ist in einer anderen Anwendung geöffnet (z. B. PowerPoint hat die Datei geöffnet). Schließen Sie die Datei in anderen Anwendungen, bevor Sie speichern.
Datei wird erstellt, erscheint jedoch leer oder beschädigt
Sicherstellen prs.save() wird aufgerufen, bevor das Presentation -Objekt wird zerstört. Nach der Zerstörung wird der interne Zustand freigegeben und nachfolgende Aufrufe werden fehlschlagen oder ungültige Ausgabe erzeugen.
Ausnahme beim Speichern
Dies tritt auf, wenn versucht wird, ein anderes Format als PPTX zu speichern, 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 in denselben Pfad überschreibt die Originaldatei:
asf::Presentation prs("deck.pptx");
// modify ...
prs.save("deck.pptx", asf::SaveFormat::PPTX); // overwrites original
Kann ich stattdessen in einen Speicherpuffer speichern statt in eine Datei?
Speichern direkt in ein std::vector<uint8_t> oder std::ostream wird in der aktuellen API nicht unterstützt. Speichern Sie in eine temporäre 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.