Kako spremiti prezentacije u C++
Aspose.Slides FOSS for C++ saves presentations exclusively to .pptx format koristeći prs.save(path, SaveFormat::PPTX). Ovaj vodič pokriva ispravan obrazac spremanja, spremanje na drugu putanju i uobičajene pogreške vezane uz spremanje.
Vodič korak po korak
Korak 1: Izgradite i povežite biblioteku
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 .Korak 2: Otvorite ili stvorite prezentaciju
Koristite alokaciju na stogu kako bi destruktor automatski očistio. Pozovite save() prije nego objekt izađe iz opsega.
#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;
}Korak 3: Spremite nakon svih izmjena
Postavite save() poziv nakon što su sve izmjene dovršene, ali prije Presentation izađe iz opsega.
#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;
}Korak 4: Spremite na drugi put
Proslijedite drugi izlazni put kako biste stvorili novu datoteku bez izmjene originala:
asf::Presentation prs("template.pptx");
// modify ...
prs.save("customized.pptx", asf::SaveFormat::PPTX);Ta template.pptx datoteka nije izmijenjena; customized.pptx se stvara (ili prepisuje ako već postoji).
Korak 5: Provjerite izlaz
Nakon spremanja, provjerite postoji li datoteka:
#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";Podržani format spremanja
| Format | Vrijednost Enuma | Podržano |
|---|---|---|
| PPTX (Office Open XML) | SaveFormat::PPTX | Da |
| N/A | Ne | |
| HTML | N/A | Ne |
| SVG | N/A | Ne |
| PNG / JPEG | N/A | Ne |
| ODP (OpenDocument) | N/A | Ne |
Podržan je samo PPTX. Pokušaj spremanja u bilo koji drugi format će izazvati iznimku.
Uobičajeni problemi i rješenja
Greška ‘pristup odbijen’ pri pisanju
Izlazna datoteka je otvorena u drugoj aplikaciji (npr. PowerPoint ima datoteku otvorenu). Zatvorite datoteku u drugim aplikacijama prije spremanja.
Datoteka je stvorena, ali izgleda prazna ili oštećena
Osigurajte prs.save() se poziva prije Presentation objekt je uništen. Nakon uništenja, interno stanje se oslobađa i daljnji pozivi će propasti ili proizvesti neispravan izlaz.
Izuzetak pri spremanju
Ovo se događa kada se pokušava spremiti u format koji nije PPTX, ili kada se pri spremanju koristi nepodržana značajka (kao što su grafikoni ili animacije).
Često postavljana pitanja
Mogu li spremiti u istu datoteku koju sam otvorio?
Da. Spremanje na istu putanju prepisuje originalnu datoteku:
asf::Presentation prs("deck.pptx");
// modify ...
prs.save("deck.pptx", asf::SaveFormat::PPTX); // overwrites original
Mogu li spremiti u memorijski spremnik umjesto u datoteku?
Spremanje izravno u std::vector<uint8_t> ili std::ostream nije podržano u trenutnom API-ju. Spremite u privremenu datoteku i pročitajte bajtove:
#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);Zadržava li spremanje sadržaj koji nisam modificirao?
Da. Nepoznati XML dijelovi iz originalne datoteke se čuvaju doslovno. Biblioteka serijalizira samo dijelove modela dokumenta koje razumije i propušta sve XML‑ove koje ne prepoznaje.