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 mit prs.save(path, SaveFormat::PPTX).Dieser Leitfaden behandelt das richtige Speichermuster, die Speicheinrichtung und häufige Fehler im Zusammenhang mit der Speichenstellung.

Schritt für Schritte

Schritt 1: Erstellen und Verknüpfen der Bibliothek

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 Stack-Zuteilung, damit der Zerstörer automatisch aufräumt. save() bevor das Objekt aus dem Bereich geht.

#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: Speichern nach allen Änderungen

Die save() Anrufe nach Abschluss aller Änderungen, aber vor dem Presentation geht über den Rahmen hinaus.

#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: Auf einen anderen Weg gehen

Geben Sie einen anderen Ausgangspfad 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 die Datei nicht geändert wird; customized.pptx wird erstellt (oder überschrieben, wenn es bereits existiert).


Schritt 5: Überprüfen Sie die Ausgabe

Nach dem Speichern überprü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 der DatenbankWert der Enum-NummerUnterstützt
PPTX (Office Open XML) -Datenbank für die Verwendung von Daten in der WebseiteSaveFormat::PPTX- Ja , das ist gut .
PDFN/A- Nein .
HTMLN/A- Nein .
SVGN/A- Nein .
PNG / JPEGN/A- Nein .
ODP (OpenDocument) - Einheitliche Datenbank für die EU-KommissionN/A- Nein .

Nur PPTX wird unterstützt. Wenn Sie versuchen, in einem anderen Format zu speichern, entsteht eine Ausnahme.


Häufige Probleme und Lösungen

Erlaubnis verweigert Fehler beim Schreiben

Die Ausgabedatei ist in einer anderen Anwendung geöffnet (z. B. PowerPoint hat die Datei gefahren). Schließen Sie die Datei in anderen Anwendungen, bevor Sie sie speichern.

Datei erstellt, aber leer oder beschädigt erscheint

Sicherstellen prs.save() ist vor dem Presentation Objekt wird zerstört. Nach der Zerstörung wird der interne Zustand freigegeben und nachfolgende Anrufe werden fehlschlagen oder eine ungültige Ausgabe erzeugen.

Ausnahme bei der Sparung

Dies geschieht, wenn ein anderes Format als PPTX gespeichert wird oder wenn während des Speicherns eine nicht unterstützte Funktion (wie Diagramme oder Animationen) verwendet wird.


Häufig gestellte Fragen

Kann ich in die gleiche Datei speichern, die ich geöffnet habe?

Wenn man die Datei auf den gleichen Pfad speichert, wird sie überschrieben.:

asf::Presentation prs("deck.pptx");
// modify ...
prs.save("deck.pptx", asf::SaveFormat::PPTX); // overwrites original

Kann ich in einen Speicherpuffer speichern?

Die Einzahlung direkt an eine 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);

Bewahrt das Speichern Inhalte, die ich nicht geändert habe?

Ja. Unbekannte XML-Teile aus der Originaldatei werden wörtlich erhalten. Die Bibliothek serialisiert nur die Teile des Dokumentmodells, das sie versteht, und führt alle nicht erkannten XML durch.


Siehe auch:

 Deutsch