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ā.