Prezentációk létrehozása C++-ban

Prezentációk létrehozása C++-ban

Az Aspose.Slides FOSS for C++ lehetővé teszi, hogy teljesen C++‑ban hozzon létre PowerPoint‑prezentációkat, Microsoft Office függőség nélkül. Ez az útmutató bemutatja, hogyan lehet új prezentációt létrehozni, diákot és alakzatokat hozzáadni, szöveget formázni, és elmenteni az eredményt.

Lépésről‑lépésre útmutató

1. lépés: A könyvtár hozzáadása a CMake projektedhez

Használja a CMake FetchContent-et a könyvtár közvetlen integrálásához a GitHub-ról. C++20 vagy újabb szükséges.

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)

Nem szükséges más rendszercsomag.


2. lépés: A szükséges fejlécek beillesztése

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

Minden típus a Aspose::Slides::Foss névtérben található. A tömörség kedvéért az alábbi példák egy névtér‑aliaszt használnak:

namespace asf = Aspose::Slides::Foss;

3. lépés: Prezentáció létrehozása

Készítsen egy Presentation-t a veremben. Egy új bemutató egy üres diával kezdődik.

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

Fontos: Használjon stack-allocációt vagy std::unique_ptr-t, hogy a destruktor automatikusan felszabadítsa a belső erőforrásokat.


4. lépés: Diát elérni

Az első dia indexe 0. Egy üres prezentációnak pontosan egy diája van.

namespace asf = Aspose::Slides::Foss;

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

5. lépés: Alakzat hozzáadása

Használja a slide.shapes().add_auto_shape() parancsot egy AutoShape hozzáadásához. A paraméterek (shape_type, x, y, width, height) pontban vannak megadva (1 pont = 1/72 hüvelyk; a szabványos dia 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;
}

6. lépés: A bemutató mentése

Hívja meg a prs.save(path, SaveFormat::PPTX)-t, mielőtt a Presentation kilép a hatókörből. A PPTX az egyetlen támogatott kimeneti formátum.

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

A fájl atomik módon kerül írásra; ha hiba lép fel a hívás előtt, nem jön létre kimeneti fájl.


Teljes működő példa

Az alábbi program egy kétdiapozíciós prezentációt hoz létre, amelynek az első dián egy címszöveg alakzat, a másodikon pedig egy táblázat található.

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

Általános problémák és megoldások

Segfault vagy double-free a Presentation megsemmisítésekor

Az Presentation megsemmisítése után tárolsz egy hivatkozást vagy mutatót egy diára vagy alakzatra. Az slides(), shapes() stb. által visszaadott összes hivatkozás érvénytelen lesz, amikor az Presentation destruktora lefut. Tartsd az Presentation‑t életben a teljes időtartam alatt, amíg a gyermekobjektumait használod.

SaveFormat::PPTX is not a function fordítóhiba

SaveFormat::PPTX egy enum érték, nem függvény. Használd úgy, mint prs.save("file.pptx", asf::SaveFormat::PPTX).

Linker hiba: meghatározatlan hivatkozás a Aspose::Slides::Foss::Presentation-ra

Győződjön meg arról, hogy a CMakeLists.txt a könyvtárra hivatkozik a target_link_libraries(my_app PRIVATE aspose_slides_foss) segítségével.


Gyakran Ismételt Kérdések

Mi a diák alapértelmezett mérete?

Egy új Presentation() a szabványos 10 × 7,5 hüvelykes (720 × 540 pont) méretű diákat hoz létre. A dia méretének módosítása még nem támogatott ebben a kiadásban.

Hozzáadhatok több mint egy diát?

Igen. Hívja meg a prs.slides().add_empty_slide(&prs.layout_slides()[0])-t, hogy egy üres diát fűzzön hozzá, és index szerint érje el:

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

Megnyithatok egy meglévő fájlt, és hozzáadhatok diákat?

Igen:

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

Milyen formátumokba menthetek?

Csak a SaveFormat::PPTX támogatott. A PDF, HTML, SVG vagy képek exportálása nem érhető el ebben a kiadásban.


Lásd még

 Magyar