איך לשמור מצגות ב‑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
האם אפשר לשמור למאגר זיכרון במקום קובץ?
שמירה ישירה ל std::vector<uint8_t> או std::ostream לא נתמך ב-API הנוכחי. שמור לקובץ זמני וקרא את הבייטים:
#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 שהיא אינה מזהה.