Hur man skapar presentationer i C++

Hur man skapar presentationer i C++

Aspose.Slides FOSS for C++ låter dig skapa PowerPoint-presentationer helt i C++ utan beroende av Microsoft Office. Den här guiden visar hur du skapar en ny presentation, lägger till bilder och former, formaterar text och sparar resultatet.

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 header‑filerna

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

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

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: Öppna en bild

Den första bilden är på 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 × 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 uppstår innan detta anrop, skapas ingen utdatafil.


Fullständigt fungerande exempel

Följande program skapar en tvåbildspresentation 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 double-free vid Presentation destruktion

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

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

Se till 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 standardstorleken 10 × 7,5 tum (720 × 540 punkter). Att ändra bildstorleken stöds ännu inte i den här utgåvan.

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

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