Cara Memuat Presentasi di C++
Aspose.Slides FOSS for C++ memungkinkan Anda membuka file .pptx apa pun, memeriksa isinya, dan baik menyimpannya kembali ke PPTX atau mengekstrak data darinya. Panduan ini mencakup membuka file, mengiterasi slide, membaca teks shape, dan round‑tripping 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 Presentasi yang Ada
Berikan jalur file ke konstruktor Presentation. Destructor menangani pembersihan.
#include <Aspose/Slides/Foss/presentation.h>
#include <iostream>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs("input.pptx");
std::cout << "Slide count: " << prs.slides().size() << "\n";
prs.save("output.pptx", asf::SaveFormat::PPTX);
return 0;
}Bagian XML yang tidak dikenal dalam file sumber dipertahankan secara verbatim: perpustakaan tidak pernah menghapus konten yang belum dipahaminya.
Langkah 3: Periksa Slide
Iterasi semua slide dan cetak jumlah shape mereka:
#include <Aspose/Slides/Foss/presentation.h>
#include <iostream>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs("deck.pptx");
for (size_t i = 0; i < prs.slides().size(); ++i) {
auto& slide = prs.slides()[i];
std::cout << "Slide " << i << ": "
<< slide.shapes().size() << " shapes\n";
}
return 0;
}Langkah 4: Baca Teks Bentuk
Iterasi pada shape dan baca teks dari shape yang memiliki TextFrame:
#include <Aspose/Slides/Foss/presentation.h>
#include <iostream>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs("deck.pptx");
for (size_t i = 0; i < prs.slides().size(); ++i) {
auto& slide = prs.slides()[i];
for (size_t j = 0; j < slide.shapes().size(); ++j) {
auto& shape = slide.shapes()[j];
if (shape.has_text_frame()) {
auto text = shape.text_frame()->text();
if (!text.empty()) {
std::cout << " Shape text: " << text << "\n";
}
}
}
}
return 0;
}Langkah 5: Baca Properti Dokumen
Akses properti dokumen inti dari prs.document_properties():
#include <Aspose/Slides/Foss/presentation.h>
#include <iostream>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs("deck.pptx");
auto& props = prs.document_properties();
std::cout << "Title: " << props.title() << "\n";
std::cout << "Author: " << props.author() << "\n";
std::cout << "Subject: " << props.subject() << "\n";
return 0;
}Langkah 6: Simpan Putar Balik
Setelah memeriksa atau memodifikasi presentasi, simpan kembali ke PPTX:
prs.save("output.pptx", asf::SaveFormat::PPTX);Menyimpan ke jalur yang berbeda membuat file baru. Menyimpan ke jalur yang sama menimpa file asli.
Masalah Umum dan Solusi
File tidak ditemukan atau tidak dapat dibuka
Periksa bahwa jalur ke file .pptx sudah benar relatif terhadap direktori kerja. Gunakan std::filesystem::path untuk konstruksi jalur yang kuat:
#include <filesystem>
auto path = std::filesystem::path(__FILE__).parent_path() / "assets" / "deck.pptx";
asf::Presentation prs(path.string());Exception: Format file tidak didukung
Perpustakaan hanya mendukung .pptx (Office Open XML). File .ppt (PowerPoint biner 97-2003) lama tidak didukung.
Shape tidak memiliki text_frame
Beberapa bentuk (Connectors, PictureFrames, GroupShapes) tidak memiliki bingkai teks. Lindungi dengan shape.has_text_frame() sebelum mengakses teks.
Pertanyaan yang Sering Diajukan
Apakah pemuatan mempertahankan semua konten asli?
Ya. Bagian XML yang tidak diketahui dipertahankan secara verbatim pada penyimpanan round‑trip. Perpustakaan hanya menserialisasi bagian‑bagian model dokumen yang dipahaminya, dan meneruskan setiap XML yang tidak dikenalnya.
Bisakah saya memuat PPTX yang dilindungi kata sandi?
Presentasi yang dilindungi kata sandi (terenkripsi) tidak didukung dalam edisi ini.
Bisakah saya mengekstrak gambar yang disematkan?
Akses koleksi gambar: prs.images() mengembalikan ImageCollection. Setiap gambar memiliki metode width(), height(), dan binary_data() untuk membaca data gambar mentah.
Apakah memuat dari buffer dalam memori didukung?
Memuat dari std::vector<uint8_t> atau std::istream tidak tersedia dalam API saat ini. Tuliskan byte ke file sementara terlebih dahulu, kemudian berikan jalur ke konstruktor Presentation.