Kā izveidot prezentācijas C++ valodā

Kā izveidot prezentācijas C++ valodā

Aspose.Slides FOSS for C++ ļauj izveidot PowerPoint prezentācijas pilnīgi C++ valodā, neizmantojot Microsoft Office. Šis ceļvedis parāda, kā izveidot jaunu prezentāciju, pievienot slaidus un formas, formatēt tekstu un saglabāt rezultātu.

Rokasgrāmata soli pa solim

1. solis: Pievienojiet bibliotēku savam CMake projektam

Izmantojiet CMake FetchContent, lai integrētu bibliotēku tieši no GitHub. Nepieciešams C++20 vai jaunāks.

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)

Nav vajadzīgas citas sistēmas pakotnes.


2. solis: Iekļaut nepieciešamās galvenes

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

Visi tipi atrodas Aspose::Slides::Foss vārdtelpā. Īsāk, zemāk esošajos piemēros tiek izmantots vārdtelpas alias:

namespace asf = Aspose::Slides::Foss;

3. solis: Izveidot prezentāciju

Izveidojiet Presentation stekā. Jauna prezentācija sākas ar vienu tukšu slaidu.

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

Svarīgi: Izmantojiet steka piešķiršanu vai std::unique_ptr, lai destruktors automātiski atbrīvotu iekšējos resursus.


4. solis: Piekļūt slaidam

Pirmais slaids ir indeksā 0. Tukšā prezentācija satur tieši vienu slaidu.

namespace asf = Aspose::Slides::Foss;

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

5. solis: Pievienot formu

Izmantojiet slide.shapes().add_auto_shape(), lai pievienotu AutoShape. Parametri ir (shape_type, x, y, width, height), visi ir punktos (1 punkts = 1/72 collas; standarta slaids ir 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;
}

6. solis: saglabāt prezentāciju

Izsauciet prs.save(path, SaveFormat::PPTX) pirms Presentation iziet no tvēruma. PPTX ir vienīgais atbalstītais izvades formāts.

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

Fails tiek rakstīts atomiski; ja kļūda notiek pirms šī izsaukuma, netiek izveidots neviens izvades fails.


Pilns darbos piemērs

Šī programma izveido divu slaidu prezentāciju, kurā pirmajā slaidā ir virsraksta forma, bet otrajā – tabula.

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

Vispārējās problēmas un risinājumi

Segfault vai double-free pie Presentation iznīcināšanas

Jūs glabājat atsauci vai rādītāju uz slaidu vai formu pēc tam, kad Presentation ir iznīcināts. Visas atsauces, ko atgriež slides(), shapes() utt., tiek anulētas, kad tiek izpildīts Presentation destruktors. Turiet Presentation dzīvu visu laiku, kamēr izmantojat tā bērnu objektus.

SaveFormat::PPTX is not a function kompilatora kļūda

SaveFormat::PPTX ir enum vērtība, nevis funkcija. Izmantojiet to kā prs.save("file.pptx", asf::SaveFormat::PPTX).

Saistītāja kļūda: nenoteikta atsauce uz Aspose::Slides::Foss::Presentation

Pārliecinieties, ka jūsu CMakeLists.txt ir saistīti ar bibliotēku, izmantojot target_link_libraries(my_app PRIVATE aspose_slides_foss).


Biežāk uzdotie jautājumi

Kāda ir noklusējuma slaida izmērs?

Jauns Presentation() izveido slaidus standarta 10 x 7,5 collas (720 x 540 punktu) izmērā. Slaidu izmēra mainīšana šajā izdevumā vēl nav atbalstīta.

Vai es varu pievienot vairāk nekā vienu slaidu?

Jā. Izsauciet prs.slides().add_empty_slide(&prs.layout_slides()[0]), lai pievienotu tukšu slaidu un piekļūtu tam pēc indeksa:

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

Vai varu atvērt esošu failu un pievienot slaidus?

Jā:

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

Kādus formātus varu saglabāt?

Tikai SaveFormat::PPTX ir atbalstīts. Eksportēšana uz PDF, HTML, SVG vai attēliem nav pieejama šajā izdevumā.


Skatīt arī

 Latviešu