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 Datenbank | Wert der Enum-Nummer | Unterstützt |
|---|---|---|
| PPTX (Office Open XML) -Datenbank für die Verwendung von Daten in der Webseite | SaveFormat::PPTX | - Ja , das ist gut . |
| N/A | - Nein . | |
| HTML | N/A | - Nein . |
| SVG | N/A | - Nein . |
| PNG / JPEG | N/A | - Nein . |
| ODP (OpenDocument) - Einheitliche Datenbank für die EU-Kommission | N/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.