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

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

Aspose.Slides FOSS برای C++ به شما امکان می‌دهد که ارائه‌های PowerPoint را به‌صورت کامل در C++ ایجاد کنید بدون وابستگی به Microsoft Office. این راهنما نشان می‌دهد چگونه یک ارائه جدید ایجاد کنید، اسلایدها و اشکال اضافه کنید، متن را قالب‌بندی کنید و نتیجه را ذخیره کنید.

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

مرحله 1: افزودن کتابخانه به پروژه CMake خود

از CMake FetchContent برای ادغام کتابخانه به‌صورت مستقیم از GitHub استفاده کنید. C++20 یا نسخه‌های بعدی مورد نیاز است.

cmake_minimum_required(VERSION 3.20)
project(my_slides_app LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

include(FetchContent)
FetchContent_Declare(
    aspose_slides_foss
    GIT_REPOSITORY https://github.com/aspose-slides-foss/Aspose.Slides-FOSS-for-Cpp.git
    GIT_TAG main
)
FetchContent_MakeAvailable(aspose_slides_foss)

add_executable(my_app main.cpp)
target_link_libraries(my_app PRIVATE aspose_slides_foss)

هیچ بسته سیستمی دیگری مورد نیاز نیست.


مرحله ۲: افزودن سرآیندهای مورد نیاز

#include <Aspose/Slides/Foss/presentation.h>

تمام انواع در فضای نام Aspose::Slides::Foss قرار دارند. برای اختصار، مثال‌های زیر از یک نام مستعار فضای نام استفاده می‌کنند:

namespace asf = Aspose::Slides::Foss;

مرحله ۳: ایجاد یک ارائه

یک Presentation روی پشته بسازید. یک ارائه جدید با یک اسلاید خالی شروع می‌شود.

#include <Aspose/Slides/Foss/presentation.h>
#include <iostream>

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;
    std::cout << "Slides in new presentation: " << prs.slides().size() << "\n";
    prs.save("output.pptx", asf::SaveFormat::PPTX);
    return 0;
}

مهم: از تخصیص پشته‌ای یا std::unique_ptr استفاده کنید تا مخرب به‌صورت خودکار منابع داخلی را آزاد کند.


مرحله ۴: دسترسی به یک اسلاید

اسلاید اول در ایندکس 0 است. یک ارائه خالی دقیقاً یک اسلاید دارد.

namespace asf = Aspose::Slides::Foss;

asf::Presentation prs;
auto& slide = prs.slides()[0]; // zero-based index
prs.save("output.pptx", asf::SaveFormat::PPTX);

مرحله 5: افزودن یک شکل

از slide.shapes().add_auto_shape() برای افزودن یک AutoShape استفاده کنید. پارامترها (shape_type, x, y, width, height) هستند که همه به نقطه (1 نقطه = 1/72 اینچ؛ اسلاید استاندارد 720 × 540 pt) می‌باشند.

#include <Aspose/Slides/Foss/presentation.h>

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;
    auto& slide = prs.slides()[0];

    // Rectangle at (50, 50) with 400 wide and 120 tall
    auto& shape = slide.shapes().add_auto_shape(
        asf::ShapeType::RECTANGLE, 50, 50, 400, 120);

    // Set text on the shape's text frame
    shape.text_frame()->set_text("Hello from Aspose.Slides FOSS!");

    prs.save("with-shape.pptx", asf::SaveFormat::PPTX);
    return 0;
}

مرحله ۶: ذخیرهٔ ارائه

قبل از اینکه Presentation از حوزه خارج شود، prs.save(path, SaveFormat::PPTX) را فراخوانی کنید. PPTX تنها قالب خروجی پشتیبانی‌شده است.

prs.save("result.pptx", asf::SaveFormat::PPTX);

فایل به‌صورت اتمی نوشته می‌شود؛ اگر خطایی قبل از این فراخوانی رخ دهد، هیچ فایل خروجی‌ای ایجاد نمی‌شود.


مثال کامل عملی

برنامه زیر یک ارائه دو اسلایدی ایجاد می‌کند که در اسلاید اول یک شکل عنوان دارد و در اسلاید دوم یک جدول.

#include <Aspose/Slides/Foss/presentation.h>
#include <vector>
#include <string>

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;

    // --- Slide 1: title shape ---
    auto& slide1 = prs.slides()[0];
    auto& title = slide1.shapes().add_auto_shape(
        asf::ShapeType::RECTANGLE, 40, 40, 640, 80);
    title.text_frame()->set_text("Q1 Results: Executive Summary");
    auto& fmt = title.text_frame()->paragraphs()[0].portions()[0].portion_format();
    fmt.set_font_height(32);
    fmt.set_font_bold(asf::NullableBool::TRUE);
    fmt.fill_format().set_fill_type(asf::FillType::SOLID);
    fmt.fill_format().solid_fill_color().set_color(
        asf::Color::from_argb(255, 0, 70, 127));

    // --- Slide 2: table ---
    prs.slides().add_empty_slide(&prs.layout_slides()[0]);
    auto& slide2 = prs.slides()[1];
    std::vector<double> col_w = {200.0, 120.0, 120.0};
    std::vector<double> row_h = {40.0, 40.0, 40.0};
    auto& table = slide2.shapes().add_table(40, 40, col_w, row_h);

    std::vector<std::string> headers = {"Region", "Revenue", "Growth"};
    std::vector<std::vector<std::string>> data = {
        {"North", "$1.2M", "+8%"},
        {"South", "$0.9M", "+4%"},
    };
    for (size_t col = 0; col < headers.size(); ++col) {
        table.rows()[0][col].text_frame()->set_text(headers[col]);
    }
    for (size_t r = 0; r < data.size(); ++r) {
        for (size_t c = 0; c < data[r].size(); ++c) {
            table.rows()[r + 1][c].text_frame()->set_text(data[r][c]);
        }
    }

    prs.save("q1-results.pptx", asf::SaveFormat::PPTX);
    return 0;
}

مسائل رایج و راه‌حل‌ها

خطای Segfault یا double‑free در هنگام تخریب Presentation

شما در حال ذخیره‌سازی یک مرجع یا اشاره‌گر به یک اسلاید یا شکل پس از از بین رفتن Presentation هستید. تمام مراجع بازگردانده‌شده توسط slides()، shapes() و غیره هنگام اجرای مخرب Presentation نامعتبر می‌شوند. Presentation را برای تمام مدت استفاده از اشیای فرزندش زنده نگه دارید.

SaveFormat::PPTX is not a function خطای کامپایلر

SaveFormat::PPTX یک مقدار enum است، نه یک تابع. از آن به عنوان prs.save("file.pptx", asf::SaveFormat::PPTX) استفاده کنید.

خطای لینک‌کننده: ارجاع تعریف‌نشده به Aspose::Slides::Foss::Presentation

اطمینان حاصل کنید که CMakeLists.txt شما با کتابخانه‌ای که target_link_libraries(my_app PRIVATE aspose_slides_foss) دارد، لینک می‌شود.


سوالات متداول

اندازه پیش‌فرض اسلاید چیست؟

یک Presentation() جدید اسلایدها را با اندازه استاندارد ۱۰ × ۷.۵ اینچ (۷۲۰ × ۵۴۰ نقطه) ایجاد می‌کند. تغییر اندازه اسلاید در این نسخه هنوز پشتیبانی نمی‌شود.

آیا می‌توانم بیش از یک اسلاید اضافه کنم؟

بله. برای افزودن یک اسلاید خالی prs.slides().add_empty_slide(&prs.layout_slides()[0]) را فراخوانی کنید و با ایندکس به آن دسترسی پیدا کنید:

prs.slides().add_empty_slide(&prs.layout_slides()[0]);
auto& slide2 = prs.slides()[1];

آیا می‌توانم یک فایل موجود را باز کنم و اسلایدها را اضافه کنم؟

بله:

asf::Presentation prs("existing.pptx");
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
prs.save("existing.pptx", asf::SaveFormat::PPTX);

کدام فرمت‌ها را می‌توانم ذخیره کنم؟

فقط SaveFormat::PPTX پشتیبانی می‌شود. خروجی به PDF، HTML، SVG یا تصاویر در این نسخه موجود نیست.


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

 فارسی