Cách tải bản trình chiếu trong C++
Aspose.Slides FOSS for C++ cho phép bạn mở bất kỳ tệp .pptx nào, kiểm tra nội dung của nó và hoặc lưu lại dưới dạng PPTX hoặc trích xuất dữ liệu từ nó. Hướng dẫn này bao gồm việc mở tệp, duyệt các slide, đọc văn bản của shape và thực hiện lưu lại vòng tròn.
Hướng Dẫn Từng Bước
Bước 1: Xây dựng và Liên kết Thư viện
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 .Bước 2: Mở một Bản trình chiếu hiện có
Truyền đường dẫn tệp tới hàm khởi tạo Presentation. Trình hủy sẽ xử lý việc dọn dẹp.
#include <Aspose/Slides/Foss/presentation.h>
#include <iostream>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs("input.pptx");
std::cout << "Slide count: " << prs.slides().size() << "\n";
prs.save("output.pptx", asf::SaveFormat::PPTX);
return 0;
}Các phần XML không xác định trong tệp nguồn được giữ nguyên nguyên văn: thư viện không bao giờ xóa nội dung mà nó chưa hiểu.
Bước 3: Kiểm tra các slide
Lặp qua tất cả các slide và in số lượng hình dạng của chúng:
#include <Aspose/Slides/Foss/presentation.h>
#include <iostream>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs("deck.pptx");
for (size_t i = 0; i < prs.slides().size(); ++i) {
auto& slide = prs.slides()[i];
std::cout << "Slide " << i << ": "
<< slide.shapes().size() << " shapes\n";
}
return 0;
}Bước 4: Đọc Văn bản Hình dạng
Lặp lại các hình dạng và đọc văn bản từ các hình dạng có TextFrame:
#include <Aspose/Slides/Foss/presentation.h>
#include <iostream>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs("deck.pptx");
for (size_t i = 0; i < prs.slides().size(); ++i) {
auto& slide = prs.slides()[i];
for (size_t j = 0; j < slide.shapes().size(); ++j) {
auto& shape = slide.shapes()[j];
if (shape.has_text_frame()) {
auto text = shape.text_frame()->text();
if (!text.empty()) {
std::cout << " Shape text: " << text << "\n";
}
}
}
}
return 0;
}Bước 5: Đọc thuộc tính tài liệu
Truy cập các thuộc tính tài liệu cốt lõi từ prs.document_properties():
#include <Aspose/Slides/Foss/presentation.h>
#include <iostream>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs("deck.pptx");
auto& props = prs.document_properties();
std::cout << "Title: " << props.title() << "\n";
std::cout << "Author: " << props.author() << "\n";
std::cout << "Subject: " << props.subject() << "\n";
return 0;
}Bước 6: Lưu vòng tròn
Sau khi kiểm tra hoặc chỉnh sửa bản trình chiếu, lưu lại dưới dạng PPTX:
prs.save("output.pptx", asf::SaveFormat::PPTX);Lưu vào một đường dẫn khác sẽ tạo một tệp mới. Lưu vào cùng một đường dẫn sẽ ghi đè lên tệp gốc.
Các vấn đề thường gặp và cách khắc phục
Không tìm thấy tệp hoặc không thể mở
Kiểm tra xem đường dẫn tới tệp .pptx có đúng so với thư mục làm việc hay không. Sử dụng std::filesystem::path để xây dựng đường dẫn một cách chắc chắn:
#include <filesystem>
auto path = std::filesystem::path(__FILE__).parent_path() / "assets" / "deck.pptx";
asf::Presentation prs(path.string());Ngoại lệ: Định dạng tệp không được hỗ trợ
Thư viện chỉ hỗ trợ .pptx (Office Open XML). Các tệp .ppt (PowerPoint nhị phân 97-2003) cũ không được hỗ trợ.
Shape không có text_frame
Một số hình dạng (Connectors, PictureFrames, GroupShapes) không có khung văn bản. Bảo vệ bằng shape.has_text_frame() trước khi truy cập văn bản.
Câu hỏi thường gặp
Việc tải có giữ nguyên toàn bộ nội dung gốc không?
Vâng. Các phần XML không xác định được giữ nguyên nguyên văn khi lưu vòng tròn. Thư viện chỉ tuần tự hoá các phần của mô hình tài liệu mà nó hiểu, và truyền qua bất kỳ XML nào mà nó không nhận ra.
Tôi có thể tải một PPTX được bảo vệ bằng mật khẩu không?
Các bản trình chiếu được bảo vệ bằng mật khẩu (được mã hoá) không được hỗ trợ trong phiên bản này.
Tôi có thể trích xuất hình ảnh nhúng không?
Truy cập bộ sưu tập hình ảnh: prs.images() trả về ImageCollection. Mỗi hình ảnh có các phương thức width(), height() và binary_data() để đọc dữ liệu hình ảnh thô.
Có hỗ trợ tải từ bộ đệm trong bộ nhớ không?
Việc tải từ std::vector<uint8_t> hoặc std::istream không được cung cấp trong API hiện tại. Đầu tiên ghi các byte vào một tệp tạm thời, sau đó truyền đường dẫn tới trình tạo Presentation.