Ako uložiť prezentácie v C++
Aspose.Slides FOSS for C++ saves presentations exclusively to .pptx formát pomocou prs.save(path, SaveFormat::PPTX). Tento sprievodca pokrýva správny vzor ukladania, ukladanie do inej cesty a bežné chyby súvisiace s ukladaním.
Postupný návod
Krok 1: Zostavte a prepojte knižnicu
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 .Krok 2: Otvorte alebo vytvorte prezentáciu
Použite alokáciu na zásobníku, aby sa deštruktor automaticky uvoľnil. Zavolajte save() predtým, ako objekt opustí rozsah.
#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;
}Krok 3: Uložte po všetkých úpravách
Umiestnite save() volanie po dokončení všetkých úprav, ale pred Presentation opustí rozsah.
#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;
}Krok 4: Uložte na inú cestu
Zadajte inú výstupnú cestu, aby ste vytvorili nový súbor bez úpravy originálu:
asf::Presentation prs("template.pptx");
// modify ...
prs.save("customized.pptx", asf::SaveFormat::PPTX);Súbor template.pptx súbor nie je upravený; customized.pptx je vytvorený (alebo prepísaný, ak už existuje).
Krok 5: Overte výstup
Po uložení skontrolujte, či súbor existuje:
#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";Podporovaný formát ukladania
| Formát | Enum hodnota | Podporované |
|---|---|---|
| PPTX (Office Open XML) | SaveFormat::PPTX | Áno |
| N/A | Nie | |
| HTML | N/A | Nie |
| SVG | N/A | Nie |
| PNG / JPEG | N/A | Nie |
| ODP (OpenDocument) | N/A | Nie |
Podporovaný je iba PPTX. Pokus o uloženie v akomkoľvek inom formáte vyvolá výnimku.
Bežné problémy a riešenia
Chyba odmietnutia prístupu pri zápise
Výstupný súbor je otvorený v inej aplikácii (napr. PowerPoint má súbor otvorený). Zavrite súbor v ostatných aplikáciách pred uložením.
Súbor je vytvorený, ale vyzerá prázdny alebo poškodený
Zabezpečte prs.save() sa volá pred Presentation objekt je zničený. Po zničení sa uvoľní vnútorný stav a následné volania zlyhajú alebo vygenerujú neplatný výstup.
Výnimka pri ukladaní
K tomu dochádza pri pokuse uložiť do formátu iného ako PPTX alebo pri použití nepodporovanej funkcie (napríklad grafov alebo animácií) počas ukladania.
Často kladené otázky
Môžem uložiť do toho istého súboru, ktorý som otvoril?
Áno. Uloženie do rovnakej cesty prepíše pôvodný súbor:
asf::Presentation prs("deck.pptx");
// modify ...
prs.save("deck.pptx", asf::SaveFormat::PPTX); // overwrites original
Môžem uložiť do pamäťového bufferu namiesto súboru?
Ukladanie priamo do std::vector<uint8_t> alebo std::ostream nie je podporované v aktuálnom API. Uložte do dočasného súboru a prečítajte bajty:
#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);Ukladanie zachová obsah, ktorý som nezmenil?
Áno. Neznáme XML časti z pôvodného súboru sú zachované presne tak, ako sú. Knižnica serializuje iba časti modelu dokumentu, ktoré rozumie, a ostatné XML, ktoré nepozná, jednoducho prechádza.