Wie man Präsentationen in C++ speichert

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

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

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.


Siehe auch

 Deutsch