Kuinka lisätä muotoja PowerPointiin C++:lla

Kuinka lisätä muotoja PowerPointiin C++:lla

Aspose.Slides FOSS for C++ tukee AutoShapes, Tables, Connectors ja PictureFrames -objektien lisäämistä esitysdioihin. Kaikki muoto-tyypit lisätään slide.shapes()-kokoelman kautta.

Vaiheittainen opas

Vaihe 1: Rakenna ja linkitä kirjasto

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 .

Vaihe 2: Luo esitys

Käytä pinomallista allokointia RAII-puhdistukseen.

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

Vaihe 3: Lisää AutoShape

slide.shapes().add_auto_shape(shape_type, x, y, width, height) sijoittaa muodon annettuun sijaintiin ja kokoon (kaikki pisteinä). Käytä ShapeType vakioita muodon valitsemiseen.

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

Vaihe 4: Lisää taulukko

slide.shapes().add_table(x, y, col_widths, row_heights) luo taulukon määritetyssä sijainnissa. Sarakeleveydet ja rivikorkeudet ovat pistearvojen vektoreita.

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

Vaihe 5: Lisää liitin

Liittimet yhdistävät kaksi muotoa visuaalisesti. Luo muodot ensin, sitten lisää liitin ja aseta sen aloitus‑ ja lopetuspisteet.

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

Yhteyspisteiden indeksit on numeroitu 0‑3 suorakulmiolle: ylä=0, vasen=1, ala=2, oikea=3.


Vaihe 6: Lisää kuvan kehys

Upota kuva ja lisää se diaan PictureFrame-kuvana. Lue kuvan tavut ensin, lisää ne esityksen kuvakokoelmaan ja luo sitten kehys.

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

Yleisiä ongelmia ja korjauksia

Muoto näkyy näkyvän dian alueen ulkopuolella

Diat ovat oletuksena 720 × 540 pistettä. x‑ tai y‑arvot, jotka ylittävät nämä rajat, asettavat muodon dian ulkopuolelle. Säilytä x < 720 ja y < 540, ja varmista x + width <= 720 ja y + height <= 540.

add_auto_shape() palauttaa viitteen tuhottuun objektiin

Älä tallenna viitteitä Presentation-objektin elinkaaren jälkeen. Kaikki lapsiobjektit omistaa Presentation ja ne mitätöidään tuhoutumisen yhteydessä.

Taulukon solun teksti on tyhjä määrittämisen jälkeen

Oikea menetelmä on .text_frame()->set_text(). Soluihin pääsee table.rows()[row_index][col_index].text_frame()->set_text("value").


Usein kysytyt kysymykset

Kuinka monta muotoa voin lisätä diaan?

Kirjaston asettamaa rajoitusta ei ole. Käytännön rajoitukset riippuvat tiedoston koosta ja kohde‑PPTX‑katselimen renderöintikyvystä.

Voinko muuttaa muodon sijaintia sen lisäämisen jälkeen?

Kyllä. add_auto_shape()‑funktion palauttavalla shape‑objektilla on set_x(), set_y(), set_width() ja set_height()‑menetelmät:

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

Voinko asettaa muodon ääriviivan (reunan) värin?

Kyllä, via shape.line_format():

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

Tukeeko kaavioita?

Ei. Kaaviot, SmartArt ja OLE-objektit eivät ole toteutettu tässä versiossa.


Katso myös

 Suomi