Sådan gemmer du præsentationer i C++
Aspose.Slides FOSS for C++ gemmer præsentationer udelukkende i .pptx‑format ved hjælp af prs.save(path, SaveFormat::PPTX). Denne vejledning dækker det korrekte gemmemønster, gemning til en anden sti og almindelige fejl relateret til gemning.
Trin-for-trin guide
Trin 1: Byg og link biblioteket
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 .Trin 2: Åbn eller opret en præsentation
Brug stakallokering, så destruktøren rydder op automatisk. Kald save() før objektet går ud af scope.
#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;
}Trin 3: Gem efter alle ændringer
Placér save()‑kaldet efter at alle ændringer er fuldført, men før Presentation går ud af scope.
#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;
}Trin 4: Gem til en anden sti
Angiv en anden outputsti for at oprette en ny fil uden at ændre den oprindelige:
asf::Presentation prs("template.pptx");
// modify ...
prs.save("customized.pptx", asf::SaveFormat::PPTX);Filen template.pptx ændres ikke; customized.pptx oprettes (eller overskrives, hvis den allerede findes).
Trin 5: Verificer outputtet
Efter gemningen, tjek om filen findes:
#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";Understøttet gemmeformat
| Format | Enum-værdi | Understøttet |
|---|---|---|
| PPTX (Office Open XML) | SaveFormat::PPTX | Ja |
| N/A | Nej | |
| HTML | N/A | Nej |
| SVG | N/A | Nej |
| PNG / JPEG | N/A | Nej |
| ODP (OpenDocument) | N/A | Nej |
Kun PPTX understøttes. Forsøg på at gemme i et andet format vil kaste en undtagelse.
Almindelige problemer og løsninger
Fejl: Tilladelse nægtet ved skrivning
Outputfilen er åben i et andet program (f.eks. har PowerPoint filen åben). Luk filen i andre programmer, før du gemmer.
Filen oprettes, men fremstår som tom eller beskadiget
Sørg for, at prs.save() kaldes, før Presentation-objektet destrueres. Efter destruktion frigives den interne tilstand, og efterfølgende kald vil fejle eller producere ugyldigt output.
Undtagelse ved lagring
Dette opstår, når du forsøger at gemme i et andet format end PPTX, eller når du bruger en ikke‑understøttet funktion (såsom diagrammer eller animationer) under gemning.
Ofte stillede spørgsmål
Kan jeg gemme til den samme fil, jeg åbnede?
Ja. Gemning til den samme sti overskriver den oprindelige fil:
asf::Presentation prs("deck.pptx");
// modify ...
prs.save("deck.pptx", asf::SaveFormat::PPTX); // overwrites original
Kan jeg gemme til en hukommelsesbuffer i stedet for en fil?
At gemme direkte til en std::vector<uint8_t> eller std::ostream understøttes ikke i den nuværende API. Gem til en midlertidig fil og læs 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);Bevarer gemning indhold, som jeg ikke har ændret?
Ja. Ukendte XML-dele fra den oprindelige fil bevares ordret. Biblioteket serialiserer kun de dele af dokumentmodellen, som det forstår, og sender enhver XML, den ikke genkender, videre.