Com desar presentacions en C++
Aspose.Slides FOSS for C++ desa presentacions exclusivament al format .pptx 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: Compila i enllaça 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. Crideu save() abans que l’objecte surti del seu abast.
#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 la crida save() després que totes les modificacions estiguin completes, però abans que 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
Passeu un camí d’eixida diferent per crear un fitxer nou sense modificar l’original:
asf::Presentation prs("template.pptx");
// modify ...
prs.save("customized.pptx", asf::SaveFormat::PPTX);El fitxer template.pptx no es modifica; customized.pptx es crea (o es sobreescriu si ja existeix).
Pas 5: Verifica la sortida
Després de desar, 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ó | Admet |
|---|---|---|
| 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 provocarà 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). Tanqueu el fitxer en altres aplicacions abans de desar.
El fitxer es crea però apareix buit o corrupte
Assegureu que prs.save() es cridi abans que l’objecte Presentation sigui 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 un format de desament 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 he obert?
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?
Desar directament a un std::vector<uint8_t> o std::ostream no està suportat a l’API actual. Desa en un fitxer temporal i llegeix 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);Desar 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 a través de qualsevol XML que no reconeix.