Hvordan legge til former i PowerPoint i C++

Hvordan legge til former i PowerPoint i C++

Aspose.Slides FOSS for C++ støtter å legge til AutoShapes, Tables, Connectors og PictureFrames i presentasjonslysbilder. Alle formtyper legges til via slide.shapes()-samlingen.

Trinnvis veiledning

Trinn 1: Bygg og koble 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 .

Steg 2: Opprett en presentasjon

Bruk stakkallokering for RAII‑opprydding.

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

Trinn 3: Legg til en AutoShape

slide.shapes().add_auto_shape(shape_type, x, y, width, height) plasserer en form på den angitte posisjonen og størrelsen (alle i punkter). Bruk ShapeType konstanter for å velge 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;
}

Steg 4: Legg til en tabell

slide.shapes().add_table(x, y, col_widths, row_heights) oppretter en tabell på den angitte posisjonen. Kolonnebredder og radhøyder er vektorer av punktverdier.

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

Steg 5: Legg til en kobling

Koblinger kobler to former visuelt. Opprett formene først, deretter legg til en kobling og angi start‑ og sluttkoblingspunktene.

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

Tilkoblingsstedindekser er nummerert 0‑3 for et rektangel: top=0, left=1, bottom=2, right=3.


Steg 6: Legg til en bilde-ramme

Bytt inn et bilde og legg det til lysbildet som en PictureFrame. Les bilde‑bytene først, legg dem til presentasjonens bildesamling, og opprett deretter 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;
}

Vanlige problemer og løsninger

Formen vises utenfor det synlige lysbildeområdet

Lysbilder er som standard 720 × 540 punkter. Verdier av x eller y utenfor disse grensene plasserer formen utenfor lysbildet. Behold x < 720 og y < 540, og sørg for x + width <= 720 og y + height <= 540.

add_auto_shape() returnerer en referanse til et ødelagt objekt

Ikke lagre referanser utover levetiden til Presentation. Alle underobjekter eies av Presentation og blir ugyldige ved destruksjon.

Tabellcelletekst er tom etter tildeling

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


Ofte stilte spørsmål

Hvor mange former kan jeg legge til på et lysbilde?

Det er ingen bibliotekpålagt grense. Praktiske begrensninger avhenger av filstørrelse og gjengivelsesevnen til din mål‑PPTX‑viser.

Kan jeg endre posisjonen til en figur etter at jeg har lagt den til?

Ja. Shape‑objektet som returneres av 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 sette fargen på figurens omriss (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 støttet?

Nei. Charts, SmartArt og OLE objects er ikke implementert i denne utgaven.


Se også

 Norsk