Jak uložit prezentace v C++
Aspose.Slides FOSS for C++ ukládá prezentace výhradně do formátu .pptx pomocí prs.save(path, SaveFormat::PPTX). Tento průvodce pokrývá 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: Sestavit a propojit 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 postaral o úklid. Zavolejte save() před tí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 volání save() po dokončení všech úprav, ale před tím, než Presentation vyjde z rozsahu.
#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
Zadejte jinou výstupní cestu pro vytvoření nového souboru bez úpravy původního:
asf::Presentation prs("template.pptx");
// modify ...
prs.save("customized.pptx", asf::SaveFormat::PPTX);Soubor template.pptx není upraven; customized.pptx je vytvořen (nebo přepsán, pokud již existuje).
Krok 5: Ověřte 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 jiných aplikacích před uložením.
Soubor je vytvořen, ale vypadá prázdně nebo poškozeně
Zajistěte, aby byla prs.save() zavolána před tím, než je objekt Presentation 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 tomuto 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í do stejné cesty 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í v aktuálním API podporováno. 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);Ukládání zachová obsah, který jsem neupravil?
Ano. Neznámé části XML z původního souboru jsou zachovány doslovně. Knihovna serializuje pouze části modelu dokumentu, které rozumí, a předává jakékoli XML, které nerozpozná.