Kā pievienot formas PowerPoint programmā, izmantojot C++

Kā pievienot formas PowerPoint programmā, izmantojot C++

Aspose.Slides FOSS for C++ atbalsta AutoShapes, Tables, Connectors un PictureFrames pievienošanu prezentācijas slaidiem. Visi formu tipi tiek pievienoti caur slide.shapes() kolekciju.

Rokasgrāmata soli pa solim

1. solis: Bibliotēkas būvēšana un saistīšana

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. solis: Izveidot prezentāciju

Izmantojiet steka piešķiršanu RAII tīrīšanai.

#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. solis: Pievienot AutoShape

slide.shapes().add_auto_shape(shape_type, x, y, width, height) novieto formu dotajā pozīcijā un izmērā (visi punktos). Izmantojiet ShapeType konstantes, lai izvēlētos formu.

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

Solis 4: Pievienot tabulu

slide.shapes().add_table(x, y, col_widths, row_heights) izveido tabulu norādītā pozīcijā. Kolonnu platumi un rindu augstumi ir punktu vērtību vektori.

#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. solis: Pievienot savienotāju

Savienotāji vizuāli savieno divas formas. Vispirms izveidojiet formas, pēc tam pievienojiet savienotāju un iestatiet tā sākuma un beigu savienojuma punktus.

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

Savienojuma vietas indeksi ir numurēti no 0 līdz 3 taisnstūrim: augšā=0, pa kreisi=1, apakšā=2, pa labi=3.


6. solis: Pievienot attēla rāmi

Iegult attēlu un pievienot to slaidam kā PictureFrame. Vispirms nolasiet attēla baitus, pievienojiet tos prezentācijas attēlu kolekcijai, pēc tam izveidojiet rāmi.

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

Biežas problēmas un risinājumi

Forma parādās ārpus redzamās slaida zonas

Slaidi pēc noklusējuma ir 720 × 540 punkti. x vai y vērtības, kas pārsniedz šos robežus, novieto formu ārpus slaida. Saglabājiet x < 720 un y < 540, un pārliecinieties, ka x + width <= 720 un y + height <= 540.

add_auto_shape() atgriež atsauci uz iznīcinātu objektu

Nesaglabājiet atsauces ārpus Presentation dzīves laika. Visi bērnu objekti pieder Presentation un tiek anulēti iznīcināšanas brīdī.

Tabulas šūnas teksts ir tukšs pēc piešķiršanas

Pareizā metode ir .text_frame()->set_text(). Piekļūstiet šūnām kā table.rows()[row_index][col_index].text_frame()->set_text("value").


Biežāk uzdotie jautājumi

Cik daudz formu var pievienot slaidam?

Nav bibliotēkas noteikta ierobežojuma. Praktiskie ierobežojumi ir atkarīgi no faila lieluma un jūsu mērķa PPTX skatītāja renderēšanas iespējas.

Vai es varu mainīt formas pozīciju pēc tās pievienošanas?

Jā. Formas objekts, kas atgriezts no add_auto_shape(), satur set_x(), set_y(), set_width() un set_height() metodes:

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

Vai es varu iestatīt formas kontūras (malas) krāsu?

Jā, caur shape.line_format():

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

Vai diagrammas tiek atbalstītas?

Nē. Diagrammas, SmartArt un OLE objekti nav ieviesti šajā izdevumā.


Skatīt arī

 Latviešu