Kako kreirati prezentacije u C++

Kako kreirati prezentacije u C++

Aspose.Slides FOSS for C++ omogućuje vam stvaranje PowerPoint prezentacija u potpunosti u C++ bez ovisnosti o Microsoft Officeu. Ovaj vodič pokazuje kako stvoriti novu prezentaciju, dodati slajdove i oblike, formatirati tekst i spremiti rezultat.

Vodič korak po korak

Korak 1: Dodajte biblioteku u svoj CMake projekt

Koristite CMake FetchContent za izravno integriranje biblioteke s GitHub‑a. Potreban je C++20 ili noviji.

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)

Nisu potrebni drugi sustavni paketi.


Korak 2: Uključite potrebne zaglavlja

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

Svi tipovi nalaze se u prostoru imena Aspose::Slides::Foss. Radi sažetosti, primjeri u nastavku koriste alias prostora imena:

namespace asf = Aspose::Slides::Foss;

Korak 3: Stvori prezentaciju

Izradite Presentation na steku. Nova prezentacija započinje s jednim praznim slajdom.

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

Važno: Koristite alokaciju na stogu ili std::unique_ptr tako da destruktor automatski oslobodi interne resurse.


Korak 4: Pristup slajdu

Prvi slajd je na indeksu 0. Prazna prezentacija ima točno jedan slajd.

namespace asf = Aspose::Slides::Foss;

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

Korak 5: Dodaj oblik

Koristite slide.shapes().add_auto_shape() za dodavanje AutoShape‑a. Parametri su (shape_type, x, y, width, height), svi u točkama (1 točka = 1/72 inča; standardni slajd je 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;
}

Korak 6: Spremi prezentaciju

Pozovite prs.save(path, SaveFormat::PPTX) prije nego što Presentation izađe iz opsega. PPTX je jedini podržani izlazni format.

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

Datoteka se zapisuje atomarno; ako dođe do pogreške prije ovog poziva, ne stvara se izlazna datoteka.


Potpuni radni primjer

Sljedeći program stvara prezentaciju od dva slajda s naslovnim oblikom na prvom slajdu i tablicom na drugom.

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

Uobičajeni problemi i rješenja

Segfault ili double-free pri uništavanju Presentation

Pohranjujete referencu ili pokazivač na slajd ili oblik nakon što je Presentation uništen. Sve reference koje vraća slides(), shapes(), itd. poništavaju se kada se izvrši destruktor Presentation. Držite Presentation aktivnim tijekom cijelog trajanja dok koristite njegove podobjekte.

SaveFormat::PPTX is not a function greška kompajlera

SaveFormat::PPTX je vrijednost enumeracije, a ne funkcija. Koristite ga kao prs.save("file.pptx", asf::SaveFormat::PPTX).

Greška povezivača: nedefinirana referenca na Aspose::Slides::Foss::Presentation

Osigurajte da vaš CMakeLists.txt poveže s bibliotekom pomoću target_link_libraries(my_app PRIVATE aspose_slides_foss).


Često postavljana pitanja

Koja je zadana veličina slajda?

Novi Presentation() stvara slajdove u standardnoj veličini od 10 × 7,5 inča (720 × 540 točaka). Promjena veličine slajda još nije podržana u ovom izdanju.

Mogu li dodati više od jednog slajda?

Da. Pozovite prs.slides().add_empty_slide(&prs.layout_slides()[0]) da biste dodali prazan slajd i pristupili mu po indeksu:

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

Mogu li otvoriti postojeću datoteku i dodati slajdove?

Da:

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

U koje formate mogu spremiti?

Podržan je samo SaveFormat::PPTX. Izvoz u PDF, HTML, SVG ili slike nije dostupan u ovom izdanju.


Vidi također

 Hrvatski