Kaip išsaugoti pristatymus C++
Aspose.Slides FOSS for C++ saves presentations exclusively to .pptx formatas naudojant prs.save(path, SaveFormat::PPTX). Ši vadovas apima teisingą išsaugojimo šabloną, išsaugojimą į kitą kelią ir dažnas su išsaugojimu susijusias klaidas.
Žingsnis po žingsnio vadovas
Step 1: Sukompiliuokite ir susiekite biblioteką
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 .Žingsnis 2: Atidaryti arba sukurti pristatymą
Naudokite steko paskirstymą, kad destruktorius išvalytų automatiškai. Iškvieskite save() prieš objektas išeis iš apimties.
#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;
}Žingsnis 3: Išsaugoti po visų modifikacijų
Įdėkite save() kvietimą po to, kai visi pakeitimai baigti, bet prieš Presentation išeis iš apimties.
#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;
}Žingsnis 4: Išsaugoti į kitą kelią
Pateikite kitą išvesties kelią, kad sukurtumėte naują failą nekeičiant originalo:
asf::Presentation prs("template.pptx");
// modify ...
prs.save("customized.pptx", asf::SaveFormat::PPTX);Šis template.pptx failas nėra modifikuojamas; customized.pptx yra sukurtas (arba perrašytas, jei jau egzistuoja).
Žingsnis 5: Patikrinkite išvestį
Po išsaugojimo patikrinkite, ar failas egzistuoja:
#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";Palaikomas išsaugojimo formatas
| Formatas | Enum reikšmė | Palaikoma |
|---|---|---|
| PPTX (Office Open XML) | SaveFormat::PPTX | Taip |
| N/A | Ne | |
| HTML | N/A | Ne |
| SVG | N/A | Ne |
| PNG / JPEG | N/A | Ne |
| ODP (OpenDocument) | N/A | Ne |
Palaikomas tik PPTX. Bandymas išsaugoti kitu formatu sukels išimtį.
Dažnos problemos ir sprendimai
Rašymo leidimo atmesto klaida
Išvesties failas atvertas kitoje programoje (pvz., PowerPoint turi atvertą failą). Prieš išsaugojant uždarykite failą kitose programose.
Failas sukurtas, bet atrodo tuščias arba sugadintas
Užtikrinkite prs.save() kviečiamas prieš Presentation objektas sunaikinamas. Po sunaikinimo vidinė būsena atlaisvinama ir vėlesni kvietimai nepavyks arba sukurs neteisingą išvestį.
Išimtis išsaugant
Tai įvyksta, kai bandoma išsaugoti kitokiu formatu nei PPTX arba kai išsaugojimo metu naudojama nepalaikoma funkcija (pvz., diagramos ar animacijos).
Dažnai užduodami klausimai
Ar galiu išsaugoti į tą patį failą, kurį atidariau?
Taip. Išsaugant į tą patį kelią originalus failas perrašomas:
asf::Presentation prs("deck.pptx");
// modify ...
prs.save("deck.pptx", asf::SaveFormat::PPTX); // overwrites original
Ar galiu išsaugoti į atminties buferį vietoj failo?
Išsaugoti tiesiogiai į std::vector<uint8_t> arba std::ostream šiuo metu API nepalaikoma. Išsaugokite į laikinąjį failą ir perskaitykite baitus:
#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);Ar išsaugojimas išsaugo turinį, kurio nekeitiau?
Taip. Nežinomos XML dalys iš originalaus failo išsaugomos nepakitusiomis. Biblioteka serializuoja tik tas dokumento modelio dalis, kurias supranta, o visas nežinomą XML perduoda nepakitusią.