C++ में प्रस्तुतियों को लोड कैसे करें
Aspose.Slides FOSS for 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: स्लाइड्स का निरीक्षण करें
सभी स्लाइड्स पर इटररेट करें और उनके shape count को प्रिंट करें:
#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());Exception: फ़ाइल प्रारूप समर्थित नहीं है
लाइब्रेरी केवल .pptx (Office Open XML) का समर्थन करती है। लेगेसी .ppt (बाइनरी PowerPoint 97-2003) फ़ाइलें समर्थित नहीं हैं।
Shape में कोई text_frame नहीं है
कुछ आकार (Connectors, PictureFrames, GroupShapes) के पास टेक्स्ट फ्रेम नहीं होता। टेक्स्ट तक पहुँचने से पहले shape.has_text_frame() के साथ सुरक्षा करें।
अक्सर पूछे जाने वाले प्रश्न
क्या लोडिंग सभी मूल सामग्री को संरक्षित करती है?
हाँ। अज्ञात XML भागों को राउंड‑ट्रिप सहेजने पर शब्दशः संरक्षित रखा जाता है। लाइब्रेरी केवल दस्तावेज़ मॉडल के उन भागों को सीरियलाइज़ करती है जिन्हें वह समझती है, और किसी भी XML को पास करती है जिसे वह पहचान नहीं पाती।
क्या मैं पासवर्ड‑संरक्षित PPTX लोड कर सकता हूँ?
पासवर्ड-प्रोटेक्टेड (एन्क्रिप्टेड) प्रस्तुतियों का इस संस्करण में समर्थन नहीं किया जाता है।
क्या मैं एम्बेडेड छवियों को निकाल सकता हूँ?
छवियों के संग्रह तक पहुँचें: prs.images() ImageCollection लौटाता है। प्रत्येक छवि में कच्चा छवि डेटा पढ़ने के लिए width(), height() और binary_data() मेथड होते हैं।
क्या इन‑मेमोरी बफ़र से लोड करना समर्थित है?
वर्तमान API में std::vector<uint8_t> या std::istream से लोड करना उजागर नहीं किया गया है। पहले बाइट्स को एक अस्थायी फ़ाइल में लिखें, फिर Presentation कंस्ट्रक्टर को पथ पास करें।