איך לטעון מצגות ב‑C++
Aspose.Slides FOSS for C++ lets you open any .pptx קובץ, בחן את תוכנו, או לשמור אותו חזרה ל‑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: פתיחת מצגת קיימת
העבר את נתיב הקובץ ל‑ Presentation קונסטרקטור. הדסטרקטור מטפל בניקוי.
#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;
}חלקי XML לא ידועים בקובץ המקור נשמרים במדויק: הספרייה לעולם אינה מסירה תוכן שהיא עדיין לא מבינה.
שלב 3: בדיקת שקופיות
עבור על כל השקופיות והדפס את מספר הצורות בכל אחת:
#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;
}שלב 4: קריאת טקסט הצורה
עבור על הצורות וקרא טקסט מצורות שיש להן 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;
}שלב 5: קריאת תכונות המסמך
גש למאפייני המסמך המרכזיים מ‑ 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;
}שלב 6: שמירה מעגלית
לאחר בדיקה או שינוי של המצגת, שמור אותה חזרה ל‑PPTX:
prs.save("output.pptx", asf::SaveFormat::PPTX);שמירה לנתיב שונה יוצרת קובץ חדש. שמירה לאותו נתיב מחליפה את הקובץ המקורי.
בעיות נפוצות ותיקונים
הקובץ לא נמצא או שלא ניתן לפתוח אותו
בדוק שהנתיב ל‑ .pptx קובץ הוא נכון יחסית לתיקיית העבודה. השתמש ב‑ std::filesystem::path ליצירת נתיב חזק:
#include <filesystem>
auto path = std::filesystem::path(__FILE__).parent_path() / "assets" / "deck.pptx";
asf::Presentation prs(path.string());שגיאה: פורמט הקובץ אינו נתמך
הספרייה תומכת ב‑ .pptx (Office Open XML) בלבד. קבצים Legacy .ppt (binary PowerPoint 97-2003) אינם נתמכים.
לצורה אין text_frame
חלק מהצורות (Connectors, PictureFrames, GroupShapes) אין להן מסגרת טקסט. הגן עם shape.has_text_frame() לפני גישה לטקסט.
שאלות נפוצות
האם הטעינה משמרת את כל התוכן המקורי?
כן. חלקי XML לא ידועים נשמרים במדויק בעת שמירה מעגלית. הספרייה ממירה רק את החלקים של מודל המסמך שהיא מבינה, ומעבירה הלאה כל XML שהיא לא מזהה.
האם ניתן לטעון קובץ PPTX מוגן בסיסמה?
מצגות מוגנות בסיסמה (מוצפנות) אינן נתמכות בגרסה זו.
האם ניתן לחלץ תמונות משובצות?
גש לאוסף התמונות: prs.images() מחזיר את ImageCollection. לכל תמונה יש width(), height(), ו binary_data() שיטה לקריאת נתוני התמונה הגולמיים.
האם טעינה ממאגר בזיכרון נתמך?
טעינה מ std::vector<uint8_t> או std::istream אינו חשוף ב-API הנוכחי. כתבו את הבייטים לקובץ זמני תחילה, ואז העבירו את הנתיב ל- Presentation הבונה.