Ako vytvárať prezentácie v C++

Ako vytvárať prezentácie v C++

Aspose.Slides FOSS pre C++ vám umožňuje vytvárať prezentácie PowerPoint úplne v C++ bez závislosti na Microsoft Office. Tento sprievodca ukazuje, ako vytvoriť novú prezentáciu, pridať snímky a tvary, formátovať text a uložiť výsledok.

Sprievodca krok za krokom

Krok 1: Pridajte knižnicu do svojho projektu CMake

Použite CMake FetchContent na integráciu knižnice priamo z GitHubu. Vyžaduje sa C++20 alebo novší.

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)

Nie sú potrebné žiadne ďalšie systémové balíky.


Krok 2: Zahrnúť požadované hlavičky

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

Všetky typy sa nachádzajú v mennom priestore Aspose::Slides::Foss. Pre stručnosť používajú príklady nižšie alias menného priestoru:

namespace asf = Aspose::Slides::Foss;

Krok 3: Vytvoriť prezentáciu

Vytvorte Presentation na zásobníku. Nová prezentácia začína jedným prázdnym snímkom.

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

Dôležité: Použite alokáciu na zásobníku alebo std::unique_ptr, aby deštruktor automaticky uvoľnil interné zdroje.


Krok 4: Prístup k snímke

Prvý snímok je na indexe 0. Prázdna prezentácia má presne jeden snímok.

namespace asf = Aspose::Slides::Foss;

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

Krok 5: Pridať tvar

Použite slide.shapes().add_auto_shape() na pridanie AutoShape. Parametre sú (shape_type, x, y, width, height) všetky v bodoch (1 bod = 1/72 palca; štandardný snímok 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;
}

Krok 6: Uložiť prezentáciu

Zavolajte prs.save(path, SaveFormat::PPTX) predtým, než Presentation vyjde z rozsahu. PPTX je jediný podporovaný výstupný formát.

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

Súbor je zapísaný atomicky; ak nastane chyba pred týmto volaním, nevytvorí sa výstupný súbor.


Kompletný funkčný príklad

Nasledujúci program vytvára dvoj-snímkovú prezentáciu s tvarom nadpisu na prvej snímke a tabuľkou na druhej.

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

Bežné problémy a riešenia

Segfault alebo double-free pri zničení Presentation

Ukladáte odkaz alebo ukazovateľ na snímku alebo tvar po tom, čo bol Presentation zničený. Všetky odkazy vrátené metódami slides(), shapes() atď. sú neplatné, keď sa spustí deštruktor Presentation. Udržujte Presentation nažive po celú dobu, kedy používate jeho podobjekty.

SaveFormat::PPTX is not a function chyba kompilátora

SaveFormat::PPTX je hodnota výčtu, nie funkcia. Použite ju ako prs.save("file.pptx", asf::SaveFormat::PPTX).

Chyba linkeru: nedefinovaná referencia na Aspose::Slides::Foss::Presentation

Uistite sa, že váš CMakeLists.txt odkazuje na knižnicu s target_link_libraries(my_app PRIVATE aspose_slides_foss).


Často kladené otázky

Aká je predvolená veľkosť snímky?

Nový Presentation() vytvára snímky v štandardnej veľkosti 10 x 7,5 palca (720 x 540 bodov). Zmena veľkosti snímky zatiaľ nie je podporovaná v tejto edícii.

Môžem pridať viac ako jeden snímok?

Áno. Zavolajte prs.slides().add_empty_slide(&prs.layout_slides()[0]) na pridanie prázdneho snímku a prístup k nemu podľa indexu:

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

Môžem otvoriť existujúci súbor a pridať snímky?

Áno:

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

Do akých formátov môžem uložiť?

Iba SaveFormat::PPTX je podporovaný. Export do PDF, HTML, SVG alebo obrázkov nie je v tejto edícii k dispozícii.


Pozri tiež

 Slovenčina