Sådan tilføjer du former til PowerPoint i C++

Sådan tilføjer du former til PowerPoint i C++

Aspose.Slides FOSS for C++ understøtter at tilføje AutoShapes, Tables, Connectors og PictureFrames til præsentationsslides. Alle formtyper tilføjes gennem slide.shapes()-samlingen.

Trin-for-trin guide

Trin 1: Byg og link biblioteket

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 .

Trin 2: Opret en præsentation

Brug stakallokering til RAII‑oprydning.

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

Trin 3: Tilføj en AutoShape

slide.shapes().add_auto_shape(shape_type, x, y, width, height) placerer en form på den angivne position og størrelse (alle i point). Brug ShapeType konstanter til at vælge formen.

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

Trin 4: Tilføj en tabel

slide.shapes().add_table(x, y, col_widths, row_heights) opretter en tabel på den angivne position. Kolonnebredder og rækkehøjder er vektorer af punktværdier.

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

Trin 5: Tilføj en connector

Forbindelser forbinder to former visuelt. Opret først formerne, tilføj derefter en forbindelse og indstil dens start- og slutforbindelsespunkter.

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

Forbindelsesstedindekser er nummereret 0‑3 for en rektangel: top=0, venstre=1, bund=2, højre=3.


Trin 6: Tilføj en billedramme

Indlejr et billede og tilføj det til sliden som en PictureFrame. Læs billedbytes først, tilføj dem til præsentationens billedsamling, og opret derefter rammen.

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

Almindelige problemer og løsninger

Formen vises uden for det synlige slide-området

Dias er som standard 720 × 540 points. Værdier af x eller y uden for disse grænser placerer formen uden for diaset. Behold x < 720 og y < 540, og sørg for x + width <= 720 og y + height <= 540.

add_auto_shape() returnerer en reference til et destrueret objekt

Gem ikke referencer ud over levetiden for Presentation. Alle underordnede objekter ejes af Presentation og ugyldiggøres ved destruktion.

Tabelcelletekst er tom efter tildeling

Den korrekte metode er .text_frame()->set_text(). Få adgang til celler som table.rows()[row_index][col_index].text_frame()->set_text("value").


Ofte stillede spørgsmål

Hvor mange former kan jeg tilføje til et dias?

Der er ingen bibliotekspålagt grænse. Praktiske grænser afhænger af filstørrelsen og gengivelseskapaciteten i din mål‑PPTX‑fremviser.

Kan jeg ændre en formes position efter at have tilføjet den?

Ja. Shape‑objektet, der returneres af add_auto_shape(), har set_x(), set_y(), set_width() og set_height() metoder:

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

Kan jeg indstille farven på formens omrids (kant)?

Ja, via shape.line_format():

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

Er diagrammer understøttet?

Nej. Diagrammer, SmartArt og OLE‑objekter er ikke implementeret i denne udgave.


Se også

 Dansk