Cara Menyimpan Presentasi dalam C++
Aspose.Slides FOSS for C++ saves presentations exclusively to .pptx format menggunakan prs.save(path, SaveFormat::PPTX). Panduan ini mencakup pola penyimpanan yang benar, menyimpan ke jalur yang berbeda, dan kesalahan umum terkait penyimpanan.
Panduan Langkah-demi-Langkah
Langkah 1: Bangun dan Tautkan 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 Buat Presentasi
Gunakan alokasi stack sehingga destruktor membersihkan secara otomatis. Panggil save() sebelum objek keluar dari lingkup.
#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 Setelah Semua Modifikasi
Tempatkan save() panggil setelah semua modifikasi selesai, tetapi sebelum the Presentation keluar dari ruang lingkup.
#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 Jalur yang Berbeda
Berikan jalur output yang berbeda untuk membuat file baru tanpa mengubah yang asli:
asf::Presentation prs("template.pptx");
// modify ...
prs.save("customized.pptx", asf::SaveFormat::PPTX);The template.pptx file tidak dimodifikasi; customized.pptx dibuat (atau ditimpa jika sudah ada).
Langkah 5: Verifikasi Output
Setelah penyimpanan, periksa apakah file ada:
#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 Penyimpanan yang Didukung
| Format | Nilai Enum | Didukung |
|---|---|---|
| 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 didukung. Mencoba menyimpan dalam format lain akan melemparkan pengecualian.
Masalah Umum dan Solusinya
Kesalahan izin ditolak saat menulis
File output terbuka di aplikasi lain (misalnya, PowerPoint memiliki file terbuka). Tutup file di aplikasi lain sebelum menyimpan.
File dibuat tetapi tampak kosong atau rusak
Pastikan prs.save() dipanggil sebelum Presentation objek dihancurkan. Setelah penghancuran, status internal dilepaskan dan panggilan berikutnya akan gagal atau menghasilkan output yang tidak valid.
Pengecualian saat menyimpan
Ini terjadi ketika mencoba format penyimpanan selain PPTX, atau ketika menggunakan fitur yang tidak didukung (seperti diagram atau animasi) selama penyimpanan.
Pertanyaan yang Sering Diajukan
Apakah saya dapat menyimpan ke file yang sama yang saya buka?
Ya. Menyimpan ke jalur yang sama akan menimpa file asli:
asf::Presentation prs("deck.pptx");
// modify ...
prs.save("deck.pptx", asf::SaveFormat::PPTX); // overwrites original
Apakah saya dapat menyimpan ke buffer memori alih-alih file?
Menyimpan langsung ke std::vector<uint8_t> atau std::ostream tidak didukung dalam API saat ini. Simpan ke file sementara dan baca byte-nya:
#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);Apakah penyimpanan mempertahankan konten yang belum saya ubah?
Ya. Bagian XML yang tidak dikenal dari file asli dipertahankan apa adanya. Perpustakaan hanya men-serialisasi bagian-bagian model dokumen yang dipahaminya, dan meneruskan semua XML yang tidak dikenalnya.