Πώς να προσθέσετε σχήματα στο PowerPoint με C++

Πώς να προσθέσετε σχήματα στο PowerPoint με C++

Aspose.Slides FOSS for C++ υποστηρίζει την προσθήκη AutoShapes, Tables, Connectors και PictureFrames σε διαφάνειες παρουσίασης. Όλοι οι τύποι σχημάτων προστίθενται μέσω της συλλογής slide.shapes().

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

Βήμα 1: Κατασκευή και σύνδεση της βιβλιοθήκης

git clone https://github.com/aspose-slides-foss/Aspose.Slides-FOSS-for-Cpp.git
cd Aspose.Slides-FOSS-for-Cpp && mkdir build && cd build
cmake .. && cmake --build .

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

Χρησιμοποιήστε κατανομή στο στοίβα για τον καθαρισμό RAII.

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

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;
    auto& slide = prs.slides()[0];
    // ... add shapes ...
    prs.save("output.pptx", asf::SaveFormat::PPTX);
    return 0;
}

Βήμα 3: Προσθήκη AutoShape

slide.shapes().add_auto_shape(shape_type, x, y, width, height) τοποθετεί ένα σχήμα στη δεδομένη θέση και μέγεθος (όλα σε πόντους). Χρησιμοποιήστε τις σταθερές ShapeType για να επιλέξετε το σχήμα.

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

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;
    auto& slide = prs.slides()[0];

    // Rectangle
    auto& rect = slide.shapes().add_auto_shape(
        asf::ShapeType::RECTANGLE, 50, 50, 300, 100);
    rect.text_frame()->set_text("Rectangle shape");

    // Ellipse
    auto& ellipse = slide.shapes().add_auto_shape(
        asf::ShapeType::ELLIPSE, 400, 50, 200, 100);
    ellipse.text_frame()->set_text("Ellipse shape");

    prs.save("autoshapes.pptx", asf::SaveFormat::PPTX);
    return 0;
}

Βήμα 4: Προσθήκη πίνακα

slide.shapes().add_table(x, y, col_widths, row_heights) δημιουργεί έναν πίνακα στην καθορισμένη θέση. Τα πλάτη των στηλών και τα ύψη των γραμμών είναι διανύσματα τιμών σημείων.

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

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;
    auto& slide = prs.slides()[0];

    std::vector<double> col_widths = {150.0, 150.0, 150.0};
    std::vector<double> row_heights = {40.0, 40.0, 40.0};
    auto& table = slide.shapes().add_table(50, 200, col_widths, row_heights);

    // Set header row text
    std::vector<std::string> headers = {"Product", "Units", "Revenue"};
    for (size_t col = 0; col < headers.size(); ++col) {
        table.rows()[0][col].text_frame()->set_text(headers[col]);
    }

    // Set data rows
    std::vector<std::vector<std::string>> rows = {
        {"Widget A", "120", "$2,400"},
        {"Widget B", "85",  "$1,700"},
    };
    for (size_t r = 0; r < rows.size(); ++r) {
        for (size_t c = 0; c < rows[r].size(); ++c) {
            table.rows()[r + 1][c].text_frame()->set_text(rows[r][c]);
        }
    }

    prs.save("table.pptx", asf::SaveFormat::PPTX);
    return 0;
}

Βήμα 5: Προσθήκη συνδέσμου

Οι συνδέτες συνδέουν δύο σχήματα οπτικά. Δημιουργήστε πρώτα τα σχήματα, στη συνέχεια προσθέστε έναν σύνδεσμο και ορίστε τα σημεία έναρξης και λήξης του.

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

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;
    auto& slide = prs.slides()[0];

    auto& box1 = slide.shapes().add_auto_shape(
        asf::ShapeType::RECTANGLE, 50, 100, 150, 60);
    box1.text_frame()->set_text("Start");

    auto& box2 = slide.shapes().add_auto_shape(
        asf::ShapeType::RECTANGLE, 350, 100, 150, 60);
    box2.text_frame()->set_text("End");

    auto& conn = slide.shapes().add_connector(
        asf::ShapeType::BENT_CONNECTOR3, 0, 0, 10, 10);
    conn.set_start_shape_connected_to(&box1);
    conn.set_start_shape_connection_site_index(3); // right side of box1
    conn.set_end_shape_connected_to(&box2);
    conn.set_end_shape_connection_site_index(1);   // left side of box2

    prs.save("connector.pptx", asf::SaveFormat::PPTX);
    return 0;
}

Οι δείκτες των σημείων σύνδεσης αριθμούνται 0‑3 για ένα ορθογώνιο: πάνω=0, αριστερά=1, κάτω=2, δεξιά=3.


Βήμα 6: Προσθήκη πλαισίου εικόνας

Ενσωματώστε μια εικόνα και προσθέστε την στη διαφάνεια ως PictureFrame. Διαβάστε πρώτα τα byte της εικόνας, προσθέστε τα στη συλλογή εικόνων της παρουσίασης, στη συνέχεια δημιουργήστε το πλαίσιο.

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

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;

    std::ifstream file("logo.png", std::ios::binary);
    std::vector<uint8_t> data((std::istreambuf_iterator<char>(file)),
                               std::istreambuf_iterator<char>());

    auto& image = prs.images().add_image(data);

    auto& slide = prs.slides()[0];
    slide.shapes().add_picture_frame(
        asf::ShapeType::RECTANGLE, // bounding shape type
        50, 50,                    // x, y in points
        200, 150,                  // width, height in points
        image);

    prs.save("with-image.pptx", asf::SaveFormat::PPTX);
    return 0;
}

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

Το σχήμα εμφανίζεται εκτός της ορατής περιοχής της διαφάνειας

Οι διαφάνειες είναι προεπιλεγμένα 720 x 540 σημεία. Τιμές του x ή του y εκτός αυτών των ορίων τοποθετούν το σχήμα εκτός διαφάνειας. Διατηρήστε το x < 720 και το y < 540, και εξασφαλίστε το x + width <= 720 και το y + height <= 540.

add_auto_shape() επιστρέφει μια αναφορά σε καταστραμμένο αντικείμενο

Μην αποθηκεύετε αναφορές πέρα από τη διάρκεια ζωής του Presentation. Όλα τα αντικείμενα‑παιδιά ανήκουν στο Presentation και ακυρώνονται κατά την καταστροφή.

Το κείμενο του κελιού του πίνακα είναι κενό μετά την ανάθεση

Η σωστή μέθοδος είναι .text_frame()->set_text(). Πρόσβαση στα κελιά ως table.rows()[row_index][col_index].text_frame()->set_text("value").


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

Πόσα σχήματα μπορώ να προσθέσω σε μια διαφάνεια;

Δεν υπάρχει περιορισμός που να επιβάλλεται από τη βιβλιοθήκη. Οι πρακτικοί περιορισμοί εξαρτώνται από το μέγεθος του αρχείου και την ικανότητα απόδοσης του προγράμματος προβολής PPTX-στόχου.

Μπορώ να αλλάξω τη θέση ενός σχήματος μετά την προσθήκη του;

Ναι. Το αντικείμενο σχήματος που επιστρέφεται από add_auto_shape() έχει τις μεθόδους set_x(), set_y(), set_width() και set_height():

shape.set_x(100);
shape.set_y(200);
shape.set_width(400);
shape.set_height(80);

Μπορώ να ορίσω το χρώμα περιγράμματος (border) του σχήματος;

Ναι, μέσω shape.line_format():

shape.line_format().fill_format().solid_fill_color().set_color(
    asf::Color::from_argb(255, 200, 0, 0));

Υποστηρίζονται τα διαγράμματα;

Όχι. Τα διαγράμματα, το SmartArt και τα αντικείμενα OLE δεν έχουν υλοποιηθεί σε αυτήν την έκδοση.


Δείτε επίσης

 Ελληνικά