Cách tạo bản trình chiếu trong C++
Aspose.Slides FOSS for C++ cho phép bạn tạo các bản trình bày PowerPoint hoàn toàn bằng C++ mà không phụ thuộc vào Microsoft Office. Hướng dẫn này cho thấy cách tạo một bản trình bày mới, thêm các slide và hình dạng, định dạng văn bản và lưu kết quả.
Hướng Dẫn Từng Bước
Bước 1: Thêm Thư viện vào Dự án CMake của bạn
Sử dụng CMake FetchContent để tích hợp thư viện trực tiếp từ GitHub. Yêu cầu C++20 trở lên.
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)Không cần gói hệ thống nào khác.
Bước 2: Bao gồm các tiêu đề cần thiết
#include <Aspose/Slides/Foss/presentation.h>Tất cả các kiểu đều nằm trong không gian tên Aspose::Slides::Foss. Để ngắn gọn, các ví dụ dưới đây sử dụng bí danh không gian tên:
namespace asf = Aspose::Slides::Foss;Bước 3: Tạo một Bản trình chiếu
Xây dựng một Presentation trên ngăn xếp. Một bản trình bày mới bắt đầu với một slide trống.
#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;
}Quan trọng: Sử dụng cấp phát ngăn xếp hoặc std::unique_ptr để bộ hủy giải phóng tài nguyên nội bộ một cách tự động.
Bước 4: Truy cập một Slide
Slide đầu tiên có chỉ mục 0. Một bản trình chiếu trống có đúng một slide.
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
auto& slide = prs.slides()[0]; // zero-based index
prs.save("output.pptx", asf::SaveFormat::PPTX);Bước 5: Thêm một Hình
Sử dụng slide.shapes().add_auto_shape() để thêm một AutoShape. Các tham số là (shape_type, x, y, width, height), tất cả tính bằng điểm (1 điểm = 1/72 inch; slide tiêu chuẩn là 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;
}Bước 6: Lưu bản trình chiếu
Gọi prs.save(path, SaveFormat::PPTX) trước khi Presentation ra khỏi phạm vi. PPTX là định dạng đầu ra duy nhất được hỗ trợ.
prs.save("result.pptx", asf::SaveFormat::PPTX);Tệp được ghi một cách nguyên tử; nếu có lỗi xảy ra trước cuộc gọi này, sẽ không tạo tệp đầu ra.
Ví dụ Hoạt động Đầy đủ
Chương trình sau tạo một bản trình bày gồm hai slide, với một hình dạng tiêu đề trên slide đầu tiên và một bảng trên slide thứ hai.
#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;
}Các vấn đề thường gặp và cách khắc phục
Segfault hoặc double-free khi hủy Presentation
Bạn đang lưu trữ một tham chiếu hoặc con trỏ tới một slide hoặc shape sau khi Presentation đã bị hủy. Tất cả các tham chiếu được trả về bởi slides(), shapes(), v.v. sẽ bị vô hiệu hoá khi hàm hủy Presentation được gọi. Giữ Presentation tồn tại trong suốt thời gian bạn sử dụng các đối tượng con của nó.
SaveFormat::PPTX is not a function lỗi biên dịch
SaveFormat::PPTX là một giá trị enum, không phải hàm. Sử dụng nó như prs.save("file.pptx", asf::SaveFormat::PPTX).
Lỗi liên kết: tham chiếu không xác định tới Aspose::Slides::Foss::Presentation
Đảm bảo CMakeLists.txt của bạn liên kết với thư viện bằng target_link_libraries(my_app PRIVATE aspose_slides_foss).
Câu hỏi thường gặp
Kích thước slide mặc định là gì?
Một Presentation() mới tạo các slide với kích thước tiêu chuẩn 10 x 7,5 inch (720 x 540 point). Việc thay đổi kích thước slide chưa được hỗ trợ trong phiên bản này.
Tôi có thể thêm hơn một slide không?
Vâng. Gọi prs.slides().add_empty_slide(&prs.layout_slides()[0]) để thêm một slide trống và truy cập nó theo chỉ mục:
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
auto& slide2 = prs.slides()[1];Tôi có thể mở một tệp hiện có và thêm slide không?
Có:
asf::Presentation prs("existing.pptx");
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
prs.save("existing.pptx", asf::SaveFormat::PPTX);Tôi có thể lưu dưới định dạng nào?
Chỉ hỗ trợ SaveFormat::PPTX. Xuất ra PDF, HTML, SVG hoặc hình ảnh không khả dụng trong phiên bản này.