Kā saglabāt prezentācijas C++ valodā
Aspose.Slides FOSS for C++ saves presentations exclusively to .pptx formāts, izmantojot prs.save(path, SaveFormat::PPTX). Šis ceļvedis aptver pareizo saglabāšanas modeli, saglabāšanu citā ceļā un biežāk sastopamās ar saglabāšanu saistītās kļūdas.
Solī pa solim rokasgrāmata
1. solis: Veidot un sasaistīt bibliotēku
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 .2. solis: Atveriet vai izveidojiet prezentāciju
Izmantojiet steka piešķiršanu, lai destruktors notīrītu automātiski. Izsauciet save() pirms objekts iziet no skopa.
#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;
}3. solis: Saglabājiet pēc visām izmaiņām
Novietojiet save() izsaukumu pēc tam, kad visas izmaiņas ir pabeigtas, bet pirms Presentation iziet no skopa.
#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;
}4. solis: Saglabājiet citā ceļā
Norādiet citu izvades ceļu, lai izveidotu jaunu failu, nemainot oriģinālu:
asf::Presentation prs("template.pptx");
// modify ...
prs.save("customized.pptx", asf::SaveFormat::PPTX);Šis template.pptx fails netiek modificēts; customized.pptx tiek izveidots (vai pārrakstīts, ja tas jau pastāv).
5. solis: Pārbaudiet rezultātu
Pēc saglabāšanas pārbaudiet, vai fails pastāv:
#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";Atbalstītais saglabāšanas formāts
| Formāts | Enum vērtība | Atbalstīts |
|---|---|---|
| PPTX (Office Open XML) | SaveFormat::PPTX | Jā |
| N/A | Nē | |
| HTML | N/A | Nē |
| SVG | N/A | Nē |
| PNG / JPEG | N/A | Nē |
| ODP (OpenDocument) | N/A | Nē |
Tiek atbalstīts tikai PPTX. Mēģinājums saglabāt citā formātā izraisīs izņēmumu.
Biežāk sastopamās problēmas un to risinājumi
Rakstīšanas atļaujas lieguma kļūda
Izvades fails ir atvērts citā lietotnē (piemēram, PowerPoint ir atvēris šo failu). Aizveriet failu citās lietotnēs pirms saglabāšanas.
Fails tiek izveidots, bet izskatās tukšs vai bojāts
Nodrošiniet prs.save() tiek izsaukts pirms Presentation objekts tiek iznīcināts. Pēc iznīcināšanas iekšējais stāvoklis tiek atbrīvots, un turpmākie izsaukumi neizdosies vai radīs nederīgu izvadi.
Izņēmums saglabājot
Tas notiek, mēģinot saglabāt citā formātā, kas nav PPTX, vai izmantojot neatbalstītu funkciju (piemēram, diagrammas vai animācijas) saglabāšanas laikā.
Biežāk uzdotie jautājumi
Vai varu saglabāt tajā pašā failā, ko atvēru?
Jā. Saglabājot tajā pašā ceļā, tiek pārrakstīts sākotnējais fails:
asf::Presentation prs("deck.pptx");
// modify ...
prs.save("deck.pptx", asf::SaveFormat::PPTX); // overwrites original
Vai varu saglabāt atmiņas buferī, nevis failā?
Saglabāšana tieši uz std::vector<uint8_t> vai std::ostream nav atbalstīts pašreizējā API. Saglabājiet pagaidu failā un nolasiet 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);Vai saglabāšana saglabā saturu, ko neesmu modificējis?
Jā. Nezināmās XML daļas no sākotnējā faila tiek saglabātas precīzi kā ir. Bibliotēka serializē tikai tās dokumenta modeļa daļas, kuras saprot, un caurļauj jebkuru XML, ko neatpazīst.