Ako vytvoriť prezentácie v C++

Ako vytvoriť prezentácie v C++

Aspose.Slides FOSS for C++ lets you create PowerPoint presentations entirely in C++ with no dependency on Microsoft Office. This guide shows how to create a new presentation, add slides and shapes, format text, and save the result.

Postupný návod

Krok 1: Pridajte knižnicu do vášho CMake projektu

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: Zahrňte požadované hlavičkové súbory

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

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

namespace asf = Aspose::Slides::Foss;

Krok 3: Vytvorte 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 uvoľnil interné zdroje automaticky.


Krok 4: Prístup k snímke

Prvá snímka je na indexe 0. Prázdna prezentácia má presne jednu snímku.

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: Pridajte 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 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;
}

Krok 6: Uložte prezentáciu

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

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

Súbor sa zapisuje atomicky; ak dôjde k chybe pred týmto volaním, nevytvorí sa žiadny výstupný súbor.


Kompletný funkčný príklad

Nasledujúci program vytvorí prezentáciu s dvoma snímkami, pričom na prvej snímke je tvar s titulkom a na druhej tabuľka.

#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 Presentation zničení

Ukladáte referenciu alebo ukazovateľ na snímok alebo tvar po the Presentation bol zničený. Všetky referencie vrátené slides(), shapes(), atď. sú neplatné, keď sa Presentation deštruktor spustí. Udržujte Presentation živý po celú dobu, kým používate jeho podobjekty.

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

SaveFormat::PPTX je hodnota enum, 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 jednu snímku?

Áno. Zavolajte prs.slides().add_empty_slide(&prs.layout_slides()[0]) na pridanie prázdnej snímky a prístup k nej 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 ukladať?

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