Hur man skapar presentationer i C++

Hur man skapar presentationer i 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.

Steg-för-steg-guide

Steg 1: Lägg till biblioteket i ditt CMake-projekt

Använd CMake FetchContent för att integrera biblioteket direkt från GitHub. C++20 eller senare krävs.

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)

Inga andra systempaket krävs.


Steg 2: Inkludera de nödvändiga rubrikerna

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

Alla typer finns i Aspose::Slides::Foss namnutrymmet. För korthetens skull använder exemplen nedan ett alias för namnutrymmet:

namespace asf = Aspose::Slides::Foss;

Steg 3: Skapa en presentation

Skapa en Presentation på stacken. En ny presentation startar med en tom bild.

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

Viktigt: Använd stackallokering eller std::unique_ptr så att destruktorn frigör interna resurser automatiskt.


Steg 4: Åtkomst till en bild

Den första bilden har index 0. En tom presentation har exakt en bild.

namespace asf = Aspose::Slides::Foss;

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

Steg 5: Lägg till en form

Använd slide.shapes().add_auto_shape() för att lägga till en AutoShape. Parametrarna är (shape_type, x, y, width, height) alla i punkter (1 punkt = 1/72 tum; standardbild är 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;
}

Steg 6: Spara presentationen

Anropa prs.save(path, SaveFormat::PPTX) innan Presentation går ur scope. PPTX är det enda stödjade utdataformatet.

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

Filen skrivs atomärt; om ett fel inträffar innan detta anrop skapas ingen utdatafil.


Fullständigt fungerande exempel

Följande program skapar en presentation med två bilder med en titelform på den första bilden och en tabell på den andra.

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

Vanliga problem och lösningar

Segfault eller dubbel‑free på Presentation destruktion

Du lagrar en referens eller pekare till en bild eller form efter Presentation har förstörts. Alla referenser som returneras av slides(), shapes(), osv. blir ogiltiga när Presentation destruktorn körs. Behåll Presentation levande under hela den tid du använder dess barnobjekt.

SaveFormat::PPTX is not a function kompilatorfel

SaveFormat::PPTX är ett enum‑värde, inte en funktion. Använd det som prs.save("file.pptx", asf::SaveFormat::PPTX).

Länkningsfel: odefinierad referens till Aspose::Slides::Foss::Presentation

Säkerställ att din CMakeLists.txt länkar mot biblioteket med target_link_libraries(my_app PRIVATE aspose_slides_foss).


Vanliga frågor

Vad är standardstorleken på bilden?

En ny Presentation() skapar bilder i den standardstorlek på 10 x 7,5 tum (720 x 540 punkter). Att ändra bildstorleken stöds ännu inte i den här utgåvan.

Kan jag lägga till mer än en bild?

Ja. Anropa prs.slides().add_empty_slide(&prs.layout_slides()[0]) för att lägga till en tom bild och komma åt den via index:

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

Kan jag öppna en befintlig fil och lägga till bilder?

Ja:

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

Vilka format kan jag spara till?

Endast SaveFormat::PPTX stöds. Export till PDF, HTML, SVG eller bilder är inte tillgängligt i den här utgåvan.


Se även

 Svenska