چگونه ارائه‌ها را در C++ بارگذاری کنیم

چگونه ارائه‌ها را در C++ بارگذاری کنیم

Aspose.Slides FOSS for C++ lets you open any .pptx فایل، محتویات آن را بررسی کنید و یا آن را به‌صورت PPTX ذخیره کنید یا داده‌ها را از آن استخراج کنید. این راهنما شامل باز کردن فایل، پیمایش اسلایدها، خواندن متن اشکال و ذخیره‌سازی دورانی است.

راهنمای گام به گام

مرحله ۱: ساخت و لینک کردن کتابخانه

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 .

مرحله ۲: باز کردن یک ارائه موجود

مسیر فایل را به 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 ناشناخته در فایل منبع به همان صورت حفظ می‌شوند: کتابخانه هرگز محتوایی را که هنوز درک نکرده است حذف نمی‌کند.


مرحله ۳: بررسی اسلایدها

بر روی تمام اسلایدها پیمایش کنید و تعداد اشکال هر کدام را چاپ کنید:

#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;
}

مرحله ۴: خواندن متن اشکال

بر روی اشکال پیمایش کنید و متن را از اشکالی که دارای یک 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;
}

مرحله ۵: خواندن ویژگی‌های سند

دسترسی به ویژگی‌های اصلی سند از 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;
}

مرحله ۶: ذخیره‌سازی دورانی

پس از بررسی یا تغییر ارائه، آن را دوباره به 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() متد برای خواندن داده‌های خام تصویر.

آیا بارگذاری از یک بافر در حافظه پشتیبانی می‌شود؟?

بارگذاری از یک std::vector<uint8_t> یا std::istream «<SEG_1»> در API فعلی در دسترس نیست. ابتدا بایت‌ها را در یک فایل موقت بنویسید، سپس مسیر را به Presentation سازنده.


همچنین ببینید

 فارسی