Cara Menyimpan Pembentangan dalam C++
Aspose.Slides FOSS for C++ saves presentations exclusively to .pptx format menggunakan prs.save(path, SaveFormat::PPTX). Panduan ini merangkumi corak simpan yang betul, menyimpan ke laluan yang berbeza, dan ralat berkaitan simpanan yang biasa.
Panduan Langkah demi Langkah
Langkah 1: Bina dan Pautkan Perpustakaan
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 .Langkah 2: Buka atau Cipta Persembahan
Gunakan peruntukan stack supaya destruktor membersihkan secara automatik. Panggil save() sebelum objek keluar dari skop.
#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;
}Langkah 3: Simpan Selepas Semua Pengubahsuaian
Letakkan save() panggilan selepas semua pengubahsuaian selesai, tetapi sebelum Presentation keluar dari skop.
#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;
}Langkah 4: Simpan ke Laluan yang Berbeza
Berikan laluan output yang berbeza untuk mencipta fail baru tanpa mengubah asal:
asf::Presentation prs("template.pptx");
// modify ...
prs.save("customized.pptx", asf::SaveFormat::PPTX);Fail template.pptx fail tidak diubah; customized.pptx dicipta (atau ditulis ganti jika ia sudah wujud).
Langkah 5: Sahkan Output
Selepas penyimpanan, periksa sama ada fail wujud:
#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";Format Simpan yang Disokong
| Format | Nilai Enum | Disokong |
|---|---|---|
| PPTX (Office Open XML) | SaveFormat::PPTX | Ya |
| N/A | Tidak | |
| HTML | N/A | Tidak |
| SVG | N/A | Tidak |
| PNG / JPEG | N/A | Tidak |
| ODP (OpenDocument) | N/A | Tidak |
Hanya PPTX yang disokong. Percubaan menyimpan dalam format lain akan menyebabkan pengecualian.
Isu Umum dan Penyelesaian
Ralat kebenaran ditolak semasa menulis
Fail output dibuka dalam aplikasi lain (contoh, PowerPoint mempunyai fail terbuka). Tutup fail dalam aplikasi lain sebelum menyimpan.
Fail dicipta tetapi kelihatan kosong atau rosak
Pastikan prs.save() dipanggil sebelum Presentation objek dimusnahkan. Selepas pemusnahan, keadaan dalaman dilepaskan dan panggilan seterusnya akan gagal atau menghasilkan output yang tidak sah.
Pengecualian semasa menyimpan
Ini berlaku apabila cuba menyimpan dalam format selain PPTX, atau apabila menggunakan ciri yang tidak disokong (seperti carta atau animasi) semasa menyimpan.
Soalan Lazim
Bolehkah saya menyimpan ke fail yang sama yang saya buka?
Ya. Menyimpan ke laluan yang sama akan menulis semula fail asal:
asf::Presentation prs("deck.pptx");
// modify ...
prs.save("deck.pptx", asf::SaveFormat::PPTX); // overwrites original
Bolehkah saya menyimpan ke penampan memori dan bukannya fail?
Menyimpan secara langsung ke std::vector<uint8_t> atau std::ostream tidak disokong dalam API semasa. Simpan ke fail sementara dan baca bait:
#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);Adakah penyimpanan mengekalkan kandungan yang tidak saya ubah?
Ya. Bahagian XML yang tidak dikenali daripada fail asal dipelihara secara tepat. Perpustakaan hanya menserialkan bahagian model dokumen yang difahaminya, dan meneruskan sebarang XML yang tidak dikenali.