C++'ta Sunumlar Nasıl Oluşturulur
Aspose.Slides FOSS for C++ size Microsoft Office’a bağımlı olmadan tamamen C++ içinde PowerPoint sunumları oluşturmanıza olanak tanır. Bu kılavuz, yeni bir sunum oluşturmayı, slayt ve şekiller eklemeyi, metni biçimlendirmeyi ve sonucu kaydetmeyi gösterir.
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 bir sistem paketi gerekmez.
Adım 2: Gerekli Başlıkları Dahil Edin
#include <Aspose/Slides/Foss/presentation.h>Tüm tipler Aspose::Slides::Foss ad alanında bulunur. Kısalık sağlamak için, aşağıdaki örneklerde bir ad alanı takma adı kullanılmıştır:
namespace asf = Aspose::Slides::Foss;Adım 3: Sunum Oluştur
Yığına bir Presentation oluşturun. Yeni bir sunum bir boş slaytla 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: Yığın tahsisi veya std::unique_ptr kullanın, böylece yıkıcı 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 Ekle
slide.shapes().add_auto_shape() kullanarak bir AutoShape ekleyin. Parametreler (shape_type, x, y, width, height) tümü puan cinsindendir (1 puan = 1/72 inç; standart slayt 720 × 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 Kaydet
prs.save(path, SaveFormat::PPTX)‘i Presentation kapsam dışına çıkmadan önce çağırın. 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
Presentation imhası sırasında segfault veya çift serbest bırakma
Presentation yok edildikten sonra bir slayt veya şekle referans ya da işaretçi saklıyorsunuz. slides(), shapes() vb. tarafından döndürülen tüm referanslar, Presentation yıkıcı çalıştığında geçersiz olur. Presentation‘yi, alt nesnelerini kullandığınız tüm süre boyunca canlı tutun.
SaveFormat::PPTX is not a function derleyici hatası
SaveFormat::PPTX bir enum değerdir, fonksiyon değildir. prs.save("file.pptx", asf::SaveFormat::PPTX) olarak kullanın.
Bağlayıcı hatası: Aspose::Slides::Foss::Presentation için tanımsız referans
CMakeLists.txt‘nizin kütüphane ile target_link_libraries(my_app PRIVATE aspose_slides_foss) bağlandığından emin olun.
Sıkça Sorulan Sorular
Varsayılan slayt boyutu nedir?
Yeni bir Presentation(), standart 10 x 7.5 inç (720 x 540 nokta) boyutunda slaytlar oluşturur. Slayt boyutunu değiştirme bu sürümde henüz desteklenmemektedir.
Birden fazla slayt ekleyebilir miyim?
Evet. prs.slides().add_empty_slide(&prs.layout_slides()[0]) çağırarak boş bir slayt ekleyin ve ona indeksle erişin:
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
auto& slide2 = prs.slides()[1];Mevcut 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 formatlara kaydedebilirim?
Yalnızca SaveFormat::PPTX desteklenir. PDF, HTML, SVG veya görüntülere dışa aktarma bu sürümde mevcut değildir.