Kuinka luoda esityksiä C++:ssa

Kuinka luoda esityksiä C++:ssa

Aspose.Slides FOSS for C++ mahdollistaa PowerPoint-esitysten luomisen kokonaan C++:lla ilman riippuvuutta Microsoft Office -ohjelmistosta. Tämä opas näyttää, miten luodaan uusi esitys, lisätään dioja ja muotoja, muotoillaan tekstiä ja tallennetaan tulos.

Vaiheittainen opas

Vaihe 1: Lisää kirjasto CMake‑projektiisi

Käytä CMake FetchContent -toimintoa kirjaston integroimiseksi suoraan GitHubista. C++20 tai uudempi vaaditaan.

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)

Muita järjestelmäpaketteja ei tarvita.


Vaihe 2: Sisällytä vaaditut otsikkotiedostot

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

Kaikki tyypit sijaitsevat Aspose::Slides::Foss-nimialueessa. Tiivistämiseksi alla olevissa esimerkeissä käytetään nimialueen aliasia:

namespace asf = Aspose::Slides::Foss;

Vaihe 3: Luo esitys

Rakenna Presentation pinolle. Uusi esitys alkaa yhdellä tyhjällä dialla.

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

Tärkeää: Käytä pinomallinnusta tai std::unique_ptr, jotta destruktori vapauttaa sisäiset resurssit automaattisesti.


Vaihe 4: Avaa dia

Ensimmäinen dia on indeksissä 0. Tyhjä esitys sisältää täsmälleen yhden dian.

namespace asf = Aspose::Slides::Foss;

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

Vaihe 5: Lisää muoto

Käytä slide.shapes().add_auto_shape() lisätäksesi AutoShape-objektin. Parametrit ovat (shape_type, x, y, width, height) kaikki pisteinä (1 piste = 1/72 tuumaa; standardi dia on 720 x 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;
}

Vaihe 6: Tallenna esitys

Kutsu prs.save(path, SaveFormat::PPTX) ennen kuin Presentation poistuu laajuudesta. PPTX on ainoa tuettu tulostusmuoto.

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

Tiedosto kirjoitetaan atomisesti; jos virhe tapahtuu ennen tätä kutsua, tulostetiedostoa ei luoda.


Täydellinen toimiva esimerkki

Seuraava ohjelma luo kaksidiapisteisen esityksen, jossa on otsikkomuoto ensimmäisellä dialla ja taulukko toisella.

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

Yleiset ongelmat ja korjaukset

Segfault tai double‑free Presentation tuhoutumisen yhteydessä

Varastoitat viitteen tai osoittimen diaan tai muotoon sen jälkeen, kun Presentation on tuhottu. Kaikki slides(), shapes() jne. palauttamat viitteet mitätöityvät, kun Presentation‑tuhoaja suoritetaan. Pidä Presentation elossa koko sen ajan, kun käytät sen alkiot.

SaveFormat::PPTX is not a function kääntäjävirhe

SaveFormat::PPTX on enum-arvo, ei funktio. Käytä sitä muodossa prs.save("file.pptx", asf::SaveFormat::PPTX).

Linkkerivirhe: määrittelemätön viite kohteeseen Aspose::Slides::Foss::Presentation

Varmista, että CMakeLists.txt linkittää kirjastoon käyttäen target_link_libraries(my_app PRIVATE aspose_slides_foss).


Usein kysytyt kysymykset

Mikä on dian oletuskoko?

Uusi Presentation() luo dioja standardikokoisina 10 × 7,5 tuumaa (720 × 540 pistettä) kokoisina. Dia‑koon muuttamista ei vielä tueta tässä versiossa.

Voinko lisätä useamman kuin yhden dian?

Kyllä. Kutsu prs.slides().add_empty_slide(&prs.layout_slides()[0]) lisätäksesi tyhjän dian ja käyttää sitä indeksillä:

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

Voinko avata olemassa olevan tiedoston ja lisätä dioja?

Kyllä:

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

Mihin formaatteihin voin tallentaa?

Vain SaveFormat::PPTX on tuettu. Vienti PDF-, HTML-, SVG- tai kuviin ei ole saatavilla tässä versiossa.


Katso myös

 Suomi