Wie man Präsentationen in C++ speichert

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

FormatEnum-WertUnterstützt
PPTX (Office Open XML)SaveFormat::PPTXJa
PDFN/ANein
HTMLN/ANein
SVGN/ANein
PNG / JPEGN/ANein
ODP (OpenDocument)N/ANein

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.


Siehe auch

 Deutsch