Kuinka tallentaa esityksiä C++:lla
Aspose.Slides FOSS for C++ saves presentations exclusively to .pptx formaattia käyttäen prs.save(path, SaveFormat::PPTX). Tämä opas kattaa oikean tallennusmallin, tallentamisen eri polkuun ja yleiset tallennukseen liittyvät virheet.
Vaiheittainen opas
Vaihe 1: Rakenna ja linkitä kirjasto
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 .Vaihe 2: Avaa tai luo esitys
Käytä pinoallokointia, jotta destruktori puhdistaa automaattisesti. Kutsu save() ennen kuin objekti poistuu näkyvyysalueesta.
#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;
}Vaihe 3: Tallenna kaikkien muutosten jälkeen
Sijoita save() kutsu sen jälkeen, kun kaikki muutokset on tehty, mutta ennen kuin Presentation poistuu näkyvyysalueesta.
#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;
}Vaihe 4: Tallenna eri polkuun
Anna eri tulostuspolku luodaksesi uusi tiedosto muuttamatta alkuperäistä:
asf::Presentation prs("template.pptx");
// modify ...
prs.save("customized.pptx", asf::SaveFormat::PPTX);Tämä template.pptx tiedostoa ei muuteta; customized.pptx luodaan (tai ylikirjoitetaan, jos se on jo olemassa).
Vaihe 5: Vahvista tulos
Tallennuksen jälkeen tarkista, että tiedosto on olemassa:
#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";Tuettu tallennusmuoto
| Formaatti | Enum-arvo | Tuettu |
|---|---|---|
| PPTX (Office Open XML) | SaveFormat::PPTX | Kyllä |
| N/A | Ei | |
| HTML | N/A | Ei |
| SVG | N/A | Ei |
| PNG / JPEG | N/A | Ei |
| ODP (OpenDocument) | N/A | Ei |
Vain PPTX on tuettu. Yrittäessä tallentaa muussa formaatissa heitetään poikkeus.
Yleisiä ongelmia ja korjauksia
Käyttöoikeusvirhe kirjoitettaessa
Tulostustiedosto on avoinna toisessa sovelluksessa (esim. PowerPoint on avannut tiedoston). Sulje tiedosto muissa sovelluksissa ennen tallentamista.
Tiedosto on luotu, mutta se näyttää tyhjältä tai vioittuneelta
Varmista prs.save() kutsutaan ennen Presentation objekti on tuhottu. Tuhonnan jälkeen sisäinen tila vapautetaan ja myöhemmät kutsut epäonnistuvat tai tuottavat virheellistä tulostetta.
Poikkeus tallennettaessa
Tämä tapahtuu, kun yritetään tallentaa muotoon, joka ei ole PPTX, tai kun tallennuksen aikana käytetään tukematonta ominaisuutta (kuten kaavioita tai animaatioita).
Usein kysytyt kysymykset
Voinko tallentaa samaan tiedostoon, jonka avasin?
Kyllä. Tallentaminen samaan polkuun korvaa alkuperäisen tiedoston:
asf::Presentation prs("deck.pptx");
// modify ...
prs.save("deck.pptx", asf::SaveFormat::PPTX); // overwrites original
Voinko tallentaa muistipuskuriin tiedoston sijaan?
Tallentaminen suoraan std::vector<uint8_t> tai std::ostream ei ole tuettu nykyisessä API:ssa. Tallenna väliaikaistiedostoon ja lue tavut:
#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);Säilyttääkö tallennus sisällön, jota en ole muokannut?
Kyllä. Alkuperäisen tiedoston tuntemattomat XML-osat säilytetään tarkalleen sellaisina kuin ne ovat. Kirjasto sarjoittaa vain ne dokumenttimallin osat, jotka se ymmärtää, ja ohjaa läpi kaikki XML, jota se ei tunnista.