Com desar presentacions en C++
Aspose.Slides FOSS for C++ saves presentations exclusively to .pptx format utilitzant prs.save(path, SaveFormat::PPTX). Aquesta guia cobreix el patró correcte de desament, desar a una ruta diferent i errors comuns relacionats amb el desament.
Guia pas a pas
Pas 1: Compilar i enllaçar la 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 .Pas 2: Obre o crea una presentació
Utilitzeu l’assignació a la pila perquè el destructor netegi automàticament. Crida save() abans que l’objecte surti del seu àmbit.
#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;
}Pas 3: Desa després de totes les modificacions
Col·loqueu el save() crida després que totes les modificacions s’hagin completat, però abans que el Presentation surti del seu àmbit.
#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;
}Pas 4: Desa a una ruta diferent
Passa una ruta de sortida diferent per crear un fitxer nou sense modificar l’original:
asf::Presentation prs("template.pptx");
// modify ...
prs.save("customized.pptx", asf::SaveFormat::PPTX);El template.pptx fitxer no es modifica; customized.pptx es crea (o es sobreescriu si ja existeix).
Pas 5: Verifica la sortida
Després del desament, comprova que el fitxer existeix:
#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 desament compatible
| Format | Valor d’enumeració | Compatible |
|---|---|---|
| PPTX (Office Open XML) | SaveFormat::PPTX | Sí |
| N/A | No | |
| HTML | N/A | No |
| SVG | N/A | No |
| PNG / JPEG | N/A | No |
| ODP (OpenDocument) | N/A | No |
Només es suporta PPTX. Intentar desar en qualsevol altre format llençarà una excepció.
Problemes comuns i solucions
Error de permís denegat en escriure
El fitxer de sortida està obert en una altra aplicació (p. ex., PowerPoint té el fitxer obert). Tanca el fitxer en les altres aplicacions abans de desar.
El fitxer es crea però apareix buit o corrupte
Assegura prs.save() es crida abans de Presentation L’objecte «<SEG_2»> és destruït. Després de la destrucció, l’estat intern es allibera i les crides posteriors fallaran o produiran una sortida invàlida.
Excepció en desar
Això ocorre quan s’intenta desar en un format diferent de PPTX, o quan s’utilitza una característica no compatible (com ara gràfics o animacions) durant el desament.
Preguntes freqüents
Puc desar al mateix fitxer que vaig obrir?
Sí. Desar al mateix camí sobrescriu el fitxer original:
asf::Presentation prs("deck.pptx");
// modify ...
prs.save("deck.pptx", asf::SaveFormat::PPTX); // overwrites original
Puc desar en una memòria intermèdia en lloc d’un fitxer?
Guardar directament a un std::vector<uint8_t> o std::ostream no és compatible amb l’API actual. Deseu en un fitxer temporal i llegiu els 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);El desament conserva el contingut que no he modificat?
Sí. Les parts XML desconegudes del fitxer original es conserven literalment. La biblioteca només serialitza les parts del model de document que entén i passa sense modificar qualsevol XML que no reconeix.