Kuinka luoda esityksiä C++:ssa
Aspose.Slides FOSS for C++ mahdollistaa PowerPoint-esitysten luomisen kokonaan C++:lla ilman riippuvuutta Microsoft Office -ohjelmistosta. Tämä opas näyttää, miten luodaan uusi esitys, lisätään dioja ja muotoja, muotoillaan tekstiä ja tallennetaan tulos.
Vaiheittainen opas
Vaihe 1: Lisää kirjasto CMake‑projektiisi
Käytä CMake FetchContent -toimintoa kirjaston integroimiseksi suoraan GitHubista. C++20 tai uudempi vaaditaan.
cmake_minimum_required(VERSION 3.20)
project(my_slides_app LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
include(FetchContent)
FetchContent_Declare(
aspose_slides_foss
GIT_REPOSITORY https://github.com/aspose-slides-foss/Aspose.Slides-FOSS-for-Cpp.git
GIT_TAG main
)
FetchContent_MakeAvailable(aspose_slides_foss)
add_executable(my_app main.cpp)
target_link_libraries(my_app PRIVATE aspose_slides_foss)Muita järjestelmäpaketteja ei tarvita.
Vaihe 2: Sisällytä vaaditut otsikkotiedostot
#include <Aspose/Slides/Foss/presentation.h>Kaikki tyypit sijaitsevat Aspose::Slides::Foss-nimialueessa. Tiivistämiseksi alla olevissa esimerkeissä käytetään nimialueen aliasia:
namespace asf = Aspose::Slides::Foss;Vaihe 3: Luo esitys
Rakenna Presentation pinolle. Uusi esitys alkaa yhdellä tyhjällä dialla.
#include <Aspose/Slides/Foss/presentation.h>
#include <iostream>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
std::cout << "Slides in new presentation: " << prs.slides().size() << "\n";
prs.save("output.pptx", asf::SaveFormat::PPTX);
return 0;
}Tärkeää: Käytä pinomallinnusta tai std::unique_ptr, jotta destruktori vapauttaa sisäiset resurssit automaattisesti.
Vaihe 4: Avaa dia
Ensimmäinen dia on indeksissä 0. Tyhjä esitys sisältää täsmälleen yhden dian.
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
auto& slide = prs.slides()[0]; // zero-based index
prs.save("output.pptx", asf::SaveFormat::PPTX);Vaihe 5: Lisää muoto
Käytä slide.shapes().add_auto_shape() lisätäksesi AutoShape-objektin. Parametrit ovat (shape_type, x, y, width, height) kaikki pisteinä (1 piste = 1/72 tuumaa; standardi dia on 720 x 540 pt).
#include <Aspose/Slides/Foss/presentation.h>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
auto& slide = prs.slides()[0];
// Rectangle at (50, 50) with 400 wide and 120 tall
auto& shape = slide.shapes().add_auto_shape(
asf::ShapeType::RECTANGLE, 50, 50, 400, 120);
// Set text on the shape's text frame
shape.text_frame()->set_text("Hello from Aspose.Slides FOSS!");
prs.save("with-shape.pptx", asf::SaveFormat::PPTX);
return 0;
}Vaihe 6: Tallenna esitys
Kutsu prs.save(path, SaveFormat::PPTX) ennen kuin Presentation poistuu laajuudesta. PPTX on ainoa tuettu tulostusmuoto.
prs.save("result.pptx", asf::SaveFormat::PPTX);Tiedosto kirjoitetaan atomisesti; jos virhe tapahtuu ennen tätä kutsua, tulostetiedostoa ei luoda.
Täydellinen toimiva esimerkki
Seuraava ohjelma luo kaksidiapisteisen esityksen, jossa on otsikkomuoto ensimmäisellä dialla ja taulukko toisella.
#include <Aspose/Slides/Foss/presentation.h>
#include <vector>
#include <string>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
// --- Slide 1: title shape ---
auto& slide1 = prs.slides()[0];
auto& title = slide1.shapes().add_auto_shape(
asf::ShapeType::RECTANGLE, 40, 40, 640, 80);
title.text_frame()->set_text("Q1 Results: Executive Summary");
auto& fmt = title.text_frame()->paragraphs()[0].portions()[0].portion_format();
fmt.set_font_height(32);
fmt.set_font_bold(asf::NullableBool::TRUE);
fmt.fill_format().set_fill_type(asf::FillType::SOLID);
fmt.fill_format().solid_fill_color().set_color(
asf::Color::from_argb(255, 0, 70, 127));
// --- Slide 2: table ---
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
auto& slide2 = prs.slides()[1];
std::vector<double> col_w = {200.0, 120.0, 120.0};
std::vector<double> row_h = {40.0, 40.0, 40.0};
auto& table = slide2.shapes().add_table(40, 40, col_w, row_h);
std::vector<std::string> headers = {"Region", "Revenue", "Growth"};
std::vector<std::vector<std::string>> data = {
{"North", "$1.2M", "+8%"},
{"South", "$0.9M", "+4%"},
};
for (size_t col = 0; col < headers.size(); ++col) {
table.rows()[0][col].text_frame()->set_text(headers[col]);
}
for (size_t r = 0; r < data.size(); ++r) {
for (size_t c = 0; c < data[r].size(); ++c) {
table.rows()[r + 1][c].text_frame()->set_text(data[r][c]);
}
}
prs.save("q1-results.pptx", asf::SaveFormat::PPTX);
return 0;
}Yleiset ongelmat ja korjaukset
Segfault tai double‑free Presentation tuhoutumisen yhteydessä
Varastoitat viitteen tai osoittimen diaan tai muotoon sen jälkeen, kun Presentation on tuhottu. Kaikki slides(), shapes() jne. palauttamat viitteet mitätöityvät, kun Presentation‑tuhoaja suoritetaan. Pidä Presentation elossa koko sen ajan, kun käytät sen alkiot.
SaveFormat::PPTX is not a function kääntäjävirhe
SaveFormat::PPTX on enum-arvo, ei funktio. Käytä sitä muodossa prs.save("file.pptx", asf::SaveFormat::PPTX).
Linkkerivirhe: määrittelemätön viite kohteeseen Aspose::Slides::Foss::Presentation
Varmista, että CMakeLists.txt linkittää kirjastoon käyttäen target_link_libraries(my_app PRIVATE aspose_slides_foss).
Usein kysytyt kysymykset
Mikä on dian oletuskoko?
Uusi Presentation() luo dioja standardikokoisina 10 × 7,5 tuumaa (720 × 540 pistettä) kokoisina. Dia‑koon muuttamista ei vielä tueta tässä versiossa.
Voinko lisätä useamman kuin yhden dian?
Kyllä. Kutsu prs.slides().add_empty_slide(&prs.layout_slides()[0]) lisätäksesi tyhjän dian ja käyttää sitä indeksillä:
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
auto& slide2 = prs.slides()[1];Voinko avata olemassa olevan tiedoston ja lisätä dioja?
Kyllä:
asf::Presentation prs("existing.pptx");
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
prs.save("existing.pptx", asf::SaveFormat::PPTX);Mihin formaatteihin voin tallentaa?
Vain SaveFormat::PPTX on tuettu. Vienti PDF-, HTML-, SVG- tai kuviin ei ole saatavilla tässä versiossa.