Πώς να δημιουργήσετε παρουσιάσεις σε C++

Πώς να δημιουργήσετε παρουσιάσεις σε C++

Το Aspose.Slides FOSS for C++ σάς επιτρέπει να δημιουργείτε παρουσιάσεις PowerPoint εξ ολοκλήρου σε C++ χωρίς εξάρτηση από το Microsoft Office. Αυτός ο οδηγός δείχνει πώς να δημιουργήσετε μια νέα παρουσίαση, να προσθέσετε διαφάνειες και σχήματα, να μορφοποιήσετε κείμενο και να αποθηκεύσετε το αποτέλεσμα.

Οδηγός βήμα προς βήμα

Βήμα 1: Προσθέστε τη βιβλιοθήκη στο έργο CMake σας

Χρησιμοποιήστε το CMake FetchContent για να ενσωματώσετε τη βιβλιοθήκη απευθείας από το GitHub. Απαιτείται C++20 ή νεότερη έκδοση.

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)

Δεν απαιτούνται άλλα πακέτα συστήματος.


Βήμα 2: Συμπεριλάβετε τις Απαιτούμενες Κεφαλίδες

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

Όλοι οι τύποι ζουν στον χώρο ονομάτων Aspose::Slides::Foss. Για συντομία, τα παρακάτω παραδείγματα χρησιμοποιούν ψευδώνυμο χώρου ονομάτων:

namespace asf = Aspose::Slides::Foss;

Βήμα 3: Δημιουργία παρουσίασης

Δημιουργήστε ένα Presentation στη στοίβα. Μια νέα παρουσίαση ξεκινά με μία κενή διαφάνεια.

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

Σημαντικό: Χρησιμοποιήστε κατανομή στο στοίβα ή std::unique_ptr ώστε ο καταστροφέας να απελευθερώνει αυτόματα τους εσωτερικούς πόρους.


Βήμα 4: Πρόσβαση σε μια διαφάνεια

Η πρώτη διαφάνεια βρίσκεται στο δείκτη 0. Μια κενή παρουσίαση έχει ακριβώς μία διαφάνεια.

namespace asf = Aspose::Slides::Foss;

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

Βήμα 5: Προσθήκη Σχήματος

Χρησιμοποιήστε slide.shapes().add_auto_shape() για να προσθέσετε ένα AutoShape. Οι παράμετροι είναι (shape_type, x, y, width, height) όλα σε μονάδες σημείου (1 σημείο = 1/72 ίντσας· το τυπικό slide είναι 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: Αποθήκευση της Παρουσίασης

Καλέστε prs.save(path, SaveFormat::PPTX) πριν το Presentation βγει εκτός εμβέλειας. Το PPTX είναι η μόνη υποστηριζόμενη μορφή εξόδου.

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

Το αρχείο γράφεται ατομικά· αν προκύψει σφάλμα πριν από αυτήν την κλήση, δεν δημιουργείται αρχείο εξόδου.


Πλήρες Λειτουργικό Παράδειγμα

Το παρακάτω πρόγραμμα δημιουργεί μια παρουσίαση δύο διαφανειών με ένα σχήμα τίτλου στην πρώτη διαφάνεια και έναν πίνακα στη δεύτερη.

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

Κοινά προβλήματα και διορθώσεις

Segfault ή double-free κατά την καταστροφή του Presentation

Αποθηκεύετε μια αναφορά ή δείκτη σε μια διαφάνεια ή σχήμα μετά την καταστροφή του Presentation. Όλες οι αναφορές που επιστρέφονται από τα slides(), shapes() κ.λπ. ακυρώνονται όταν εκτελείται ο καταστροφέας του Presentation. Κρατήστε το Presentation ζωντανό για ολόκληρη τη διάρκεια που χρησιμοποιείτε τα παιδικά του αντικείμενα.

SaveFormat::PPTX is not a function σφάλμα μεταγλωττιστή

SaveFormat::PPTX είναι μια τιμή enum, όχι μια συνάρτηση. Χρησιμοποιήστε το ως prs.save("file.pptx", asf::SaveFormat::PPTX).

Σφάλμα σύνδεσης: ακαθόριστη αναφορά στο Aspose::Slides::Foss::Presentation

Βεβαιωθείτε ότι το CMakeLists.txt σας συνδέεται με τη βιβλιοθήκη με target_link_libraries(my_app PRIVATE aspose_slides_foss).


Συχνές Ερωτήσεις

Ποιο είναι το προεπιλεγμένο μέγεθος διαφάνειας;

Ένα νέο Presentation() δημιουργεί διαφάνειες στο τυπικό μέγεθος 10 x 7,5 ίντσες (720 x 540 σημεία). Η αλλαγή του μεγέθους της διαφάνειας δεν υποστηρίζεται ακόμη σε αυτήν την έκδοση.

Μπορώ να προσθέσω περισσότερες από μία διαφάνειες;

Ναι. Καλέστε prs.slides().add_empty_slide(&prs.layout_slides()[0]) για να προσθέσετε μια κενή διαφάνεια και να την προσπελάσετε με δείκτη:

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

Μπορώ να ανοίξω ένα υπάρχον αρχείο και να προσθέσω διαφάνειες;

Ναι:

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

Σε ποιες μορφές μπορώ να αποθηκεύσω;

Μόνο SaveFormat::PPTX υποστηρίζεται. Η εξαγωγή σε PDF, HTML, SVG ή εικόνες δεν είναι διαθέσιμη σε αυτήν την έκδοση.


Δείτε επίσης

 Ελληνικά