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

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

Aspose.Slides FOSS for C++ ارائه‌ها را به‌صورت انحصاری به فرمت .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 .

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

از تخصیص پشته استفاده کنید تا مخرب به‌صورت خودکار پاک‌سازی شود. 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;
}

مرحله ۳: ذخیره پس از تمام تغییرات

فراخوانی 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;
}

مرحله ۴: ذخیره در مسیر متفاوت

یک مسیر خروجی متفاوت را پاس دهید تا یک فایل جدید ایجاد کنید بدون اینکه فایل اصلی را تغییر دهید:

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";

قالب ذخیره‌سازی پشتیبانی‌شده

FormatEnum ValueSupported
PPTX (Office Open XML)SaveFormat::PPTXبله
PDFN/Aخیر
HTMLN/Aخیر
SVGN/Aخیر
PNG / JPEGN/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ی که تشخیص نمی‌دهد را عبور می‌دهد.


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

 فارسی