כיצד לטעון מצגות ב‑C++
אספוז.Slides FOSS עבור C++ מאפשר לך לפתוח כל קובץ .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). קבצי .ppt (binary PowerPoint 97-2003) ישנים אינם נתמכים.
לצורה אין text_frame
לחלק מהצורות (Connectors, PictureFrames, GroupShapes) אין מסגרת טקסט. יש להגן עם shape.has_text_frame() לפני גישה לטקסט.
שאלות נפוצות
האם הטעינה משמרת את כל התוכן המקורי?
כן. חלקי XML לא ידועים נשמרים במדויק בעת שמירת סיבוב. הספרייה ממירה רק את החלקים של מודל המסמך שהיא מבינה, ועוברת דרך כל XML שהיא אינה מזהה.
האם אני יכול לטעון קובץ PPTX המוגן בסיסמה?
מצגות מוגנות בסיסמה (מוצפנות) אינן נתמכות בגרסה זו.
האם ניתן לחלץ תמונות משובצות?
גש לאוסף התמונות: prs.images() מחזיר את ImageCollection. לכל תמונה יש שיטות width(), height() ו‑binary_data() לקריאת נתוני התמונה הגולמיים.
האם טעינה מ‑in-memory buffer נתמכת?
טעינה מ-std::vector<uint8_t> או std::istream אינה חשופה ב‑API הנוכחי. כתבו את הבייטים לקובץ זמני תחילה, ואז העבירו את הנתיב לבונה Presentation.