כיצד להוסיף צורות ל‑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. קרא תחילה את בתי הבייט של התמונה, הוסף אותם לאוסף התמונות של המצגת, ואז צור את המסגרת.

#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 על 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 היעד שלך.

האם ניתן לשנות את מיקום הצורה לאחר שהוספתי אותה?

כן. האובייקט shape המוחזר על ידי 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);

האם ניתן להגדיר את צבע קו המתאר של הצורה (גבול)?

כן, דרך shape.line_format():

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

האם גרפים נתמכים?

לא. תרשימים, SmartArt, ואובייקטי OLE אינם מיושמים בגרסה זו.


ראה גם

 עברית