Jak tworzyć prezentacje w C++

Jak tworzyć prezentacje w C++

Aspose.Slides FOSS for C++ umożliwia tworzenie prezentacji PowerPoint w całości w C++ bez zależności od Microsoft Office. Ten przewodnik pokazuje, jak utworzyć nową prezentację, dodać slajdy i kształty, sformatować tekst oraz zapisać wynik.

Przewodnik krok po kroku

Krok 1: Dodaj bibliotekę do swojego projektu CMake

Użyj CMake FetchContent, aby zintegrować bibliotekę bezpośrednio z GitHub. Wymagany jest C++20 lub nowszy.

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ą wymagane żadne inne pakiety systemowe.


Krok 2: Dołącz wymagane nagłówki

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

Wszystkie typy znajdują się w przestrzeni nazw Aspose::Slides::Foss. Dla zwięzłości poniższe przykłady używają aliasu przestrzeni nazw:

namespace asf = Aspose::Slides::Foss;

Krok 3: Utwórz prezentację

Utwórz Presentation na stosie. Nowa prezentacja zaczyna się od jednego pustego slajdu.

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

Ważne: Użyj alokacji na stosie lub std::unique_ptr, aby destruktor automatycznie zwalniał zasoby wewnętrzne.


Krok 4: Uzyskaj dostęp do slajdu

Pierwszy slajd ma indeks 0. Pusta prezentacja ma dokładnie jeden slajd.

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: Dodaj kształt

Użyj slide.shapes().add_auto_shape(), aby dodać AutoShape. Parametry to (shape_type, x, y, width, height), wszystkie w punktach (1 punkt = 1/72 cala; standardowy slajd ma wymiary 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: Zapisz prezentację

Wywołaj prs.save(path, SaveFormat::PPTX) przed tym, jak Presentation wyjdzie poza zakres. PPTX jest jedynym obsługiwanym formatem wyjściowym.

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

Plik jest zapisywany atomowo; jeśli wystąpi błąd przed tym wywołaniem, nie zostanie utworzony plik wyjściowy.


Kompletny działający przykład

Poniższy program tworzy prezentację składającą się z dwóch slajdów, z kształtem tytułu na pierwszym slajdzie i tabelą na drugim.

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

Typowe problemy i rozwiązania

Segfault lub podwójne zwolnienie przy niszczeniu Presentation

Przechowujesz referencję lub wskaźnik do slajdu lub kształtu po tym, jak Presentation został zniszczony. Wszystkie referencje zwracane przez slides(), shapes() itd. są unieważniane, gdy uruchomi się destruktor Presentation. Utrzymuj Presentation przy życiu przez cały czas, w którym używasz jego obiektów potomnych.

SaveFormat::PPTX is not a function błąd kompilatora

SaveFormat::PPTX jest wartością wyliczeniową, a nie funkcją. Użyj jej jako prs.save("file.pptx", asf::SaveFormat::PPTX).

Błąd linkera: niezdefiniowane odwołanie do Aspose::Slides::Foss::Presentation

Upewnij się, że twoje CMakeLists.txt linkuje się do biblioteki przy użyciu target_link_libraries(my_app PRIVATE aspose_slides_foss).


Najczęściej zadawane pytania

Jaki jest domyślny rozmiar slajdu?

Nowy Presentation() tworzy slajdy w standardowym rozmiarze 10 × 7,5 cala (720 × 540 punktów). Zmiana rozmiaru slajdu nie jest jeszcze obsługiwana w tej edycji.

Czy mogę dodać więcej niż jeden slajd?

Tak. Wywołaj prs.slides().add_empty_slide(&prs.layout_slides()[0]), aby dodać pusty slajd i uzyskać do niego dostęp po indeksie:

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

Czy mogę otworzyć istniejący plik i dodać slajdy?

Tak:

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

Jakie formaty mogę zapisać?

Obsługiwany jest tylko SaveFormat::PPTX. Eksport do PDF, HTML, SVG lub obrazów nie jest dostępny w tej edycji.


Zobacz także

 Polski