Jak ukládat prezentace v C++
Aspose.Slides FOSS for C++ saves presentations exclusively to .pptx formát pomocí prs.save(path, SaveFormat::PPTX). Tento průvodce popisuje správný vzor ukládání, ukládání do jiné cesty a běžné chyby související s ukládáním.
Průvodce krok za krokem
Krok 1: Sestavte a propojte knihovnu
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: Otevřít nebo vytvořit prezentaci
Použijte alokaci na zásobníku, aby se destruktor automaticky postarál o úklid. Zavolejte save() předtím, než 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žit po všech úpravách
Umístěte save() volání po dokončení všech úprav, ale před 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žit do jiné cesty
Předávejte jinou výstupní cestu pro vytvoření nového souboru bez úpravy originálu:
asf::Presentation prs("template.pptx");
// modify ...
prs.save("customized.pptx", asf::SaveFormat::PPTX);Ten template.pptx soubor není upraven; customized.pptx je vytvořen (nebo přepsán, pokud již existuje).
Krok 5: Ověřit výstup
Po uložení zkontrolujte, zda soubor 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 ukládání
| Formát | Hodnota výčtu | Podporováno |
|---|---|---|
| PPTX (Office Open XML) | SaveFormat::PPTX | Ano |
| N/A | Ne | |
| HTML | N/A | Ne |
| SVG | N/A | Ne |
| PNG / JPEG | N/A | Ne |
| ODP (OpenDocument) | N/A | Ne |
Podporován je pouze PPTX. Pokus o uložení v jiném formátu vyvolá výjimku.
Časté problémy a opravy
Chyba odmítnutí oprávnění při zápisu
Výstupní soubor je otevřen v jiné aplikaci (např. PowerPoint má soubor otevřený). Zavřete soubor v ostatních aplikacích před uložením.
Soubor je vytvořen, ale zdá se prázdný nebo poškozený
Zajistěte prs.save() je voláno před Presentation objekt je zničen. Po zničení je interní stav uvolněn a následná volání selžou nebo vytvoří neplatný výstup.
Výjimka při ukládání
K tomu dochází při pokusu o uložení ve formátu jiném než PPTX nebo při použití nepodporované funkce (například grafů nebo animací) během ukládání.
Často kladené otázky
Mohu uložit do stejného souboru, který jsem otevřel?
Ano. Uložení na stejnou cestu přepíše původní soubor:
asf::Presentation prs("deck.pptx");
// modify ...
prs.save("deck.pptx", asf::SaveFormat::PPTX); // overwrites original
Mohu uložit do paměťového bufferu místo souboru?
Ukládání přímo do std::vector<uint8_t> nebo std::ostream není podporováno v aktuálním API. Uložte do dočasného souboru a přečtěte 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);Zachová ukládání obsah, který jsem neupravil?
Ano. Neznámé XML části z původního souboru jsou zachovány doslovně. Knihovna serializuje pouze ty části modelu dokumentu, které rozumí, a předává jakékoli XML, které nepozná.