Cum să salvați prezentări în C++
Aspose.Slides FOSS pentru C++ salvează prezentările exclusiv în formatul .pptx utilizând prs.save(path, SaveFormat::PPTX). Acest ghid acoperă modelul corect de salvare, salvarea într-o altă cale și erorile comune legate de salvare.
Ghid pas cu pas
Pasul 1: Construiește și leagă biblioteca
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 .Pasul 2: Deschide sau creează o prezentare
Folosiți alocarea pe stivă astfel încât destructorul să curețe automat. Apelați save() înainte ca obiectul să iasă din domeniu.
#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;
}Pasul 3: Salvează după toate modificările
Plasați apelul save() după ce toate modificările sunt finalizate, dar înainte ca Presentation să iasă din domeniu.
#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;
}Pasul 4: Salvează într-o altă cale
Furnizați o cale de ieșire diferită pentru a crea un fișier nou fără a modifica originalul:
asf::Presentation prs("template.pptx");
// modify ...
prs.save("customized.pptx", asf::SaveFormat::PPTX);Fișierul template.pptx nu este modificat; customized.pptx este creat (sau suprascris dacă există deja).
Pasul 5: Verificați ieșirea
După salvare, verificați dacă fișierul există:
#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";Format de salvare acceptat
| Format | Valoare Enum | Suportat |
|---|---|---|
| PPTX (Office Open XML) | SaveFormat::PPTX | Da |
| N/A | Nu | |
| HTML | N/A | Nu |
| SVG | N/A | Nu |
| PNG / JPEG | N/A | Nu |
| ODP (OpenDocument) | N/A | Nu |
Doar PPTX este acceptat. Încercarea de a salva în orice alt format va genera o excepție.
Probleme comune și soluții
Eroare de permisiune refuzată la scriere
Fișierul de ieșire este deschis într-o altă aplicație (de exemplu, PowerPoint are fișierul deschis). Închideți fișierul în alte aplicații înainte de a salva.
Fișierul este creat, dar pare gol sau corupt.
Asigurați-vă că prs.save() este apelat înainte ca obiectul Presentation să fie distrus. După distrugere, starea internă este eliberată și apelurile ulterioare vor eșua sau vor produce rezultate invalide.
Excepție la salvare
Acest lucru se întâmplă când se încearcă un format de salvare diferit de PPTX sau când se utilizează o funcționalitate neacceptată (cum ar fi graficele sau animațiile) în timpul salvării.
Întrebări frecvente
Pot să salvez în același fișier pe care l-am deschis?
Da. Salvarea în aceeași cale suprascrie fișierul original:
asf::Presentation prs("deck.pptx");
// modify ...
prs.save("deck.pptx", asf::SaveFormat::PPTX); // overwrites original
Pot să salvez într-un buffer de memorie în loc de un fișier?
Salvarea directă într-un std::vector<uint8_t> sau std::ostream nu este suportată în API-ul curent. Salvați într-un fișier temporar și citiți octeții:
#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);Salvarea păstrează conținutul pe care nu l-am modificat?
Da. Părțile XML necunoscute din fișierul original sunt păstrate exact așa. Biblioteca serializează doar părțile modelului de document pe care le înțelege și trece prin orice XML pe care nu îl recunoaște.