C++'ta Sunumlar Nasıl Oluşturulur
Aspose.Slides FOSS for C++ lets you create PowerPoint presentations entirely in C++ with no dependency on Microsoft Office. This guide shows how to create a new presentation, add slides and shapes, format text, and save the result.
Adım Adım Kılavuz
Adım 1: Kütüphaneyi CMake Projenize Ekleyin
Kütüphaneyi doğrudan GitHub’dan entegre etmek için CMake FetchContent kullanın. C++20 veya daha yenisi gereklidir.
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)Başka sistem paketi gerekmez.
Adım 2: Gerekli Başlık Dosyalarını Dahil Edin
#include <Aspose/Slides/Foss/presentation.h>Tüm tipler şurada bulunur Aspose::Slides::Foss ad alanı. Kısalık açısından, aşağıdaki örnekler bir ad alanı takma adı kullanır:
namespace asf = Aspose::Slides::Foss;Adım 3: Bir Sunum Oluşturun
Birini oluştur Presentation stack üzerinde. Yeni bir sunum bir boş slayt ile başlar.
#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;
}Önemli: Stack tahsisi kullanın veya std::unique_ptr böylece destructor iç kaynakları otomatik olarak serbest bırakır.
Adım 4: Bir Slayta Erişin
İlk slayt indeks 0’da bulunur. Boş bir sunum tam olarak bir slayta sahiptir.
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
auto& slide = prs.slides()[0]; // zero-based index
prs.save("output.pptx", asf::SaveFormat::PPTX);Adım 5: Bir Şekil Ekleyin
Kullanın slide.shapes().add_auto_shape() bir AutoShape eklemek için. Parametreler şunlardır (shape_type, x, y, width, height) tümü puan cinsindendir (1 point = 1/72 inç; standart slayt 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;
}Adım 6: Sunumu Kaydedin
Çağırın prs.save(path, SaveFormat::PPTX) önce Presentation kapsam dışına çıkar. PPTX tek desteklenen çıktı formatıdır.
prs.save("result.pptx", asf::SaveFormat::PPTX);Dosya atomik olarak yazılır; bu çağrıdan önce bir hata oluşursa, hiçbir çıktı dosyası oluşturulmaz.
Tam Çalışan Örnek
Aşağıdaki program, ilk slaytta bir başlık şekli ve ikinci slaytta bir tablo içeren iki slaytlık bir sunum oluşturur.
#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;
}Yaygın Sorunlar ve Çözümler
Segfault veya double‑free üzerinde Presentation yıkım
Bir slayt veya şekle ait referans ya da işaretçiyi sonrasında saklıyorsunuz. Presentation yok edildi. Tarafından döndürülen tüm referanslar slides(), shapes(), vb. geçersiz olur, … Presentation yıkıcı çalıştığında. Keep the Presentation canlı tutun, çocuk nesnelerini kullandığınız tüm süre boyunca.
SaveFormat::PPTX is not a function derleyici hatası
SaveFormat::PPTX bir enum değeridir, fonksiyon değildir. Şu şekilde kullanın prs.save("file.pptx", asf::SaveFormat::PPTX).
Bağlayıcı hatası: tanımsız referans Aspose::Slides::Foss::Presentation
Gerekli olduğundan emin olun CMakeLists.txt kütüphane ile bağlanır target_link_libraries(my_app PRIVATE aspose_slides_foss).
Sık Sorulan Sorular
Varsayılan slayt boyutu nedir?
Yeni bir Presentation() standart 10 x 7,5 inç (720 x 540 nokta) boyutunda slaytlar oluşturur. Bu sürümde slayt boyutunu değiştirme henüz desteklenmiyor.
Birden fazla slayt ekleyebilir miyim?
Evet. Çağırın prs.slides().add_empty_slide(&prs.layout_slides()[0]) boş bir slayt eklemek ve ona indeksle erişmek için:
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
auto& slide2 = prs.slides()[1];Varolan bir dosyayı açıp slayt ekleyebilir miyim?
Evet:
asf::Presentation prs("existing.pptx");
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
prs.save("existing.pptx", asf::SaveFormat::PPTX);Hangi formatlarda kaydedebilirim?
Yalnızca SaveFormat::PPTX desteklenir. PDF, HTML, SVG veya görüntülere dışa aktarma bu sürümde mevcut değil.