Kaip sukurti prezentacijas C++

Kaip sukurti prezentacijas C++

Aspose.Slides FOSS for C++ leidžia kurti PowerPoint pristatymus visiškai C++ kalba, nesikliaujant Microsoft Office. Šiame vadove parodyta, kaip sukurti naują pristatymą, pridėti skaidres ir formas, formatuoti tekstą ir išsaugoti rezultatą.

Žingsnis po žingsnio vadovas

Žingsnis 1: Pridėkite biblioteką į savo CMake projektą

Naudokite CMake FetchContent, kad integruotumėte biblioteką tiesiogiai iš GitHub. Reikalingas C++20 arba vėlesnė versija.

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)

Kiti sistemos paketai nėra reikalingi.


Žingsnis 2: Įtraukite reikiamus antraštes

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

Visi tipai yra Aspose::Slides::Foss vardų erdvėje. Dėl glaustumo žemiau pateikti pavyzdžiai naudoja vardų erdvės aliasą.

namespace asf = Aspose::Slides::Foss;

Žingsnis 3: sukurti pristatymą

Sukurkite Presentation steke. Nauja prezentacija prasideda viena tuščia skaidre.

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

Svarbu: Naudokite steko paskirstymą arba std::unique_ptr, kad destruktorius automatiškai atlaisvintų vidinius išteklius.


Žingsnis 4: Prieiga prie skaidrės

Pirmoji skaidrė yra indekse 0. Tuščia prezentacija turi lygiai vieną skaidrę.

namespace asf = Aspose::Slides::Foss;

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

Žingsnis 5: Pridėti formą

Naudokite slide.shapes().add_auto_shape(), kad pridėtumėte AutoShape. Parametrai yra (shape_type, x, y, width, height), visi matuojami taškais (1 taškas = 1/72 colio; standartinis skaidrės dydis yra 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 žingsnis: Išsaugoti prezentaciją

Iškvieskite prs.save(path, SaveFormat::PPTX) prieš Presentation išeis iš apimties. PPTX yra vienintelis palaikomas išvesties formatas.

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

Failas rašomas atominiu būdu; jei įvyksta klaida prieš šį iškvietimą, išvesties failas nesukuriamas.


Pilnas veikiantis pavyzdys

Žemiau pateikta programa sukuria dviejų skaidrių pristatymą su pavadinimo forma pirmoje skaidrėje ir lentele antroje.

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

Dažnos problemos ir sprendimai

Segfault arba double-free Presentation sunaikinimo metu

Jūs saugote nuorodą arba rodyklę į skaidrę arba objektą po to, kai Presentation buvo sunaikintas. Visos nuorodos, grąžintos slides(), shapes() ir t.t., tampa negaliojančios, kai veikia Presentation destruktorius. Laikykite Presentation gyvą visą laiką, kol naudojate jo vaikų objektus.

SaveFormat::PPTX is not a function kompiliatoriaus klaida

SaveFormat::PPTX yra enum reikšmė, o ne funkcija. Naudokite ją kaip prs.save("file.pptx", asf::SaveFormat::PPTX).

Sujungimo klaida: neapibrėžta nuoroda į Aspose::Slides::Foss::Presentation

Užtikrinkite, kad jūsų CMakeLists.txt susietų su biblioteka naudojant target_link_libraries(my_app PRIVATE aspose_slides_foss).


Dažnai užduodami klausimai

Koks yra numatytasis skaidrės dydis?

Naujas Presentation() sukuria skaidres standartiniu 10 × 7,5 colio (720 × 540 taškų) dydžiu. Skaidrių dydžio keitimas dar nepalaikomas šioje leidimo versijoje.

Ar galiu pridėti daugiau nei vieną skaidrę?

Taip. Iškvieskite prs.slides().add_empty_slide(&prs.layout_slides()[0]), kad pridėtumėte tuščią skaidrę ir pasiektumėte ją pagal indeksą:

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

Ar galiu atidaryti esamą failą ir pridėti skaidres?

Taip:

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

Kokius formatus galiu išsaugoti?

Palaikoma tik SaveFormat::PPTX. Eksportavimas į PDF, HTML, SVG arba vaizdus šioje leidimo versijoje nepasiekiamas.


Žr. taip pat

 Lietuvių