Πώς να αποθηκεύσετε παρουσιάσεις σε C++
Aspose.Slides FOSS for C++ saves presentations exclusively to .pptx μορφή χρησιμοποιώντας prs.save(path, SaveFormat::PPTX). Αυτός ο οδηγός καλύπτει το σωστό πρότυπο αποθήκευσης, την αποθήκευση σε διαφορετική διαδρομή και τα κοινά σφάλματα που σχετίζονται με την αποθήκευση.
Οδηγός βήμα προς βήμα
Βήμα 1: Κατασκευή και Σύνδεση της Βιβλιοθήκης
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: Άνοιγμα ή Δημιουργία Παρουσίασης
Χρησιμοποιήστε κατανομή στο στοίβα ώστε ο καταστροφέας να καθαρίζει αυτόματα. Καλέστε save() πριν το αντικείμενο βγει εκτός εμβέλειας.
#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: Αποθήκευση μετά από όλες τις τροποποιήσεις
Τοποθετήστε το save() κλήση μετά την ολοκλήρωση όλων των τροποποιήσεων, αλλά πριν το Presentation βγει εκτός εμβέλειας.
#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: Αποθήκευση σε διαφορετική διαδρομή
Περάστε μια διαφορετική διαδρομή εξόδου για να δημιουργήσετε ένα νέο αρχείο χωρίς να τροποποιήσετε το αρχικό:
asf::Presentation prs("template.pptx");
// modify ...
prs.save("customized.pptx", asf::SaveFormat::PPTX);Το template.pptx αρχείο δεν τροποποιείται·; customized.pptx δημιουργείται (ή αντικαθίσταται εάν υπάρχει ήδη).
Βήμα 5: Επαλήθευση του Αποτελέσματος
Μετά την αποθήκευση, ελέγξτε αν το αρχείο υπάρχει:
#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";Υποστηριζόμενη Μορφή Αποθήκευσης
| Μορφή | Τιμή Enum | Υποστηρίζεται |
|---|---|---|
| PPTX (Office Open XML) | SaveFormat::PPTX | Ναι |
| N/A | Όχι | |
| HTML | N/A | Όχι |
| SVG | N/A | Όχι |
| PNG / JPEG | N/A | Όχι |
| ODP (OpenDocument) | N/A | Όχι |
Μόνο το PPTX υποστηρίζεται. Η προσπάθεια αποθήκευσης σε οποιαδήποτε άλλη μορφή θα προκαλέσει εξαίρεση.
Κοινά προβλήματα και διορθώσεις
Σφάλμα άρνησης πρόσβασης κατά τη γραφή
Το αρχείο εξόδου είναι ανοιχτό σε άλλη εφαρμογή (π.χ., το PowerPoint έχει το αρχείο ανοιχτό). Κλείστε το αρχείο σε άλλες εφαρμογές πριν την αποθήκευση.
Το αρχείο δημιουργείται αλλά φαίνεται κενό ή κατεστραμμένο
Βεβαιωθείτε prs.save() καλείται πριν από το Presentation το αντικείμενο καταστρέφεται. Μετά την καταστροφή, η εσωτερική κατάσταση απελευθερώνεται και οι επόμενες κλήσεις θα αποτύχουν ή θα παράγουν μη έγκυρο αποτέλεσμα.
Εξαίρεση κατά την αποθήκευση
Αυτό συμβαίνει όταν προσπαθείτε να αποθηκεύσετε σε μορφή διαφορετική από PPTX, ή όταν χρησιμοποιείτε μια μη υποστηριζόμενη λειτουργία (όπως διαγράμματα ή κινούμενα σχέδια) κατά την αποθήκευση.
Συχνές Ερωτήσεις
Μπορώ να αποθηκεύσω στο ίδιο αρχείο που άνοιξα;?
Ναι. Η αποθήκευση στην ίδια διαδρομή αντικαθιστά το αρχικό αρχείο:
asf::Presentation prs("deck.pptx");
// modify ...
prs.save("deck.pptx", asf::SaveFormat::PPTX); // overwrites original
Μπορώ να αποθηκεύσω σε buffer μνήμης αντί για αρχείο;?
Αποθήκευση απευθείας σε ένα std::vector<uint8_t> ή std::ostream δεν υποστηρίζεται στο τρέχον API. Αποθηκεύστε σε ένα προσωρινό αρχείο και διαβάστε τα bytes:
#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);Διατηρεί η αποθήκευση το περιεχόμενο που δεν έχω τροποποιήσει;?
Ναι. Τα άγνωστα τμήματα XML από το αρχικό αρχείο διατηρούνται ακριβώς όπως είναι. Η βιβλιοθήκη σειριοποιεί μόνο τα τμήματα του μοντέλου εγγράφου που καταλαβαίνει και περνάει αδιατάρακτα οποιοδήποτε XML δεν αναγνωρίζει.