Hvordan lage presentasjoner i C++

Hvordan lage presentasjoner i C++

Aspose.Slides FOSS for C++ lar deg lage PowerPoint‑presentasjoner helt i C++ uten avhengighet av Microsoft Office. Denne guiden viser hvordan du oppretter en ny presentasjon, legger til lysbilder og former, formaterer tekst og lagrer resultatet.

Trinnvis veiledning

Steg 1: Legg til biblioteket i CMake-prosjektet ditt

Bruk CMake FetchContent for å integrere biblioteket direkte fra GitHub. C++20 eller nyere kreves.

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)

Ingen andre systempakker er påkrevd.


Trinn 2: Inkluder de nødvendige header‑filene

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

Alle typer finnes i Aspose::Slides::Foss-navnerommet. For korthet bruker eksemplene nedenfor et navneromsalias:

namespace asf = Aspose::Slides::Foss;

Trinn 3: Opprett en presentasjon

Konstruer en Presentation på stabelen. En ny presentasjon starter med ett tomt lysbilde.

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

Viktig: Bruk stakkallokering eller std::unique_ptr slik at destruktøren frigjør interne ressurser automatisk.


Trinn 4: Åpne et lysbilde

Den første lysbildet er på indeks 0. En tom presentasjon har nøyaktig ett lysbilde.

namespace asf = Aspose::Slides::Foss;

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

Trinn 5: Legg til en form

Bruk slide.shapes().add_auto_shape() for å legge til en AutoShape. Parameterne er (shape_type, x, y, width, height) alle i punkter (1 punkt = 1/72 tomme; standard lysbilde er 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: Lagre presentasjonen

Kall prs.save(path, SaveFormat::PPTX) før Presentation går ut av omfang. PPTX er det eneste støttede utdataformatet.

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

Filen skrives atomisk; hvis en feil oppstår før dette kallet, opprettes ingen utdatafil.


Fullstendig fungerende eksempel

Følgende program oppretter en presentasjon med to lysbilder med en tittelform på det første lysbildet og en tabell på det andre.

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

Vanlige problemer og løsninger

Segfault eller double-free ved ødeleggelse av Presentation

Du lagrer en referanse eller peker til et lysbilde eller en form etter at Presentation er blitt ødelagt. Alle referanser som returneres av slides(), shapes() osv. blir ugyldige når Presentation‑destruktøren kjøres. Hold Presentation i live i hele perioden du bruker dens underobjekter.

SaveFormat::PPTX is not a function kompilatorfeil

SaveFormat::PPTX er en enum‑verdi, ikke en funksjon. Bruk den som prs.save("file.pptx", asf::SaveFormat::PPTX).

Linker-feil: udefinert referanse til Aspose::Slides::Foss::Presentation

Sørg for at CMakeLists.txt lenker mot biblioteket med target_link_libraries(my_app PRIVATE aspose_slides_foss).


Ofte stilte spørsmål

Hva er standard lysbildestørrelse?

En ny Presentation() lager lysbilder i standardstørrelsen 10 × 7,5 tommer (720 × 540 punkt). Å endre lysbildestørrelsen støttes ikke ennå i denne utgaven.

Kan jeg legge til mer enn ett lysbilde?

Ja. Kall prs.slides().add_empty_slide(&prs.layout_slides()[0]) for å legge til et tomt lysbilde og få tilgang til det ved indeks:

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

Kan jeg åpne en eksisterende fil og legge til lysbilder?

Ja:

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

Hvilke formater kan jeg lagre til?

Kun SaveFormat::PPTX støttes. Eksport til PDF, HTML, SVG eller bilder er ikke tilgjengelig i denne utgaven.


Se også

 Norsk