Cách lưu bản trình chiếu trong C++

Cách lưu bản trình chiếu trong C++

Aspose.Slides FOSS for C++ saves presentations exclusively to .pptx định dạng sử dụng prs.save(path, SaveFormat::PPTX). Hướng dẫn này bao gồm mẫu lưu đúng, lưu vào đường dẫn khác và các lỗi thường gặp liên quan đến lưu.

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ở hoặc Tạo một Bản trình chiếu

Sử dụng cấp phát ngăn xếp để hàm hủy tự động dọn dẹp. Gọi save() trước khi đối tượng ra khỏi phạm vi.

#include <Aspose/Slides/Foss/presentation.h>

int main() {
    namespace asf = Aspose::Slides::Foss;

    // Create new
    {
        asf::Presentation prs;
        prs.save("new.pptx", asf::SaveFormat::PPTX);
    }

    // Open existing
    {
        asf::Presentation prs("input.pptx");
        prs.save("output.pptx", asf::SaveFormat::PPTX);
    }

    return 0;
}

Bước 3: Lưu sau khi đã thực hiện mọi thay đổi

Đặt save() gọi sau khi tất cả các sửa đổi đã hoàn thành, nhưng trước khi Presentation ra khỏi phạm vi.

#include <Aspose/Slides/Foss/presentation.h>

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;
    auto& slide = prs.slides()[0];
    auto& shape = slide.shapes().add_auto_shape(
        asf::ShapeType::RECTANGLE, 50, 50, 300, 100);
    shape.text_frame()->set_text("Hello, World!");
    prs.save("output.pptx", asf::SaveFormat::PPTX);
    return 0;
}

Bước 4: Lưu vào một Đường dẫn Khác

Cung cấp một đường dẫn đầu ra khác để tạo tệp mới mà không thay đổi tệp gốc:

asf::Presentation prs("template.pptx");
// modify ...
prs.save("customized.pptx", asf::SaveFormat::PPTX);

Tệp template.pptx không được sửa đổi; customized.pptx được tạo (hoặc ghi đè nếu đã tồn tại).


Bước 5: Xác minh Kết quả

Sau khi lưu, kiểm tra tệp có tồn tại không:

#include <filesystem>
#include <iostream>

auto output = std::filesystem::path("output.pptx");
std::cout << "Saved: " << std::filesystem::exists(output)
          << ", size: " << std::filesystem::file_size(output) << " bytes\n";

Định dạng Lưu được Hỗ trợ

Định dạngGiá trị EnumĐược hỗ trợ
PPTX (Office Open XML)SaveFormat::PPTX
PDFN/AKhông
HTMLN/AKhông
SVGN/AKhông
PNG / JPEGN/AKhông
ODP (OpenDocument)N/AKhông

Chỉ hỗ trợ PPTX. Cố gắng lưu ở bất kỳ định dạng nào khác sẽ gây ra ngoại lệ.


Các Vấn Đề Thường Gặp và Cách Khắc Phục

Lỗi từ chối quyền khi ghi

Tệp đầu ra đang được mở trong một ứng dụng khác (ví dụ, PowerPoint đang mở tệp). Đóng tệp trong các ứng dụng khác trước khi lưu.

Tệp được tạo nhưng hiện trống hoặc bị hỏng

Đảm bảo prs.save() được gọi trước khi Presentation đối tượng bị hủy. Sau khi hủy, trạng thái nội bộ được giải phóng và các lời gọi tiếp theo sẽ thất bại hoặc tạo ra đầu ra không hợp lệ.

Ngoại lệ khi lưu

Điều này xảy ra khi cố gắng lưu ở định dạng khác PPTX, hoặc khi sử dụng tính năng không được hỗ trợ (chẳng hạn biểu đồ hoặc hoạt ảnh) trong quá trình lưu.


Câu hỏi thường gặp

Tôi có thể lưu vào cùng một tệp mà tôi đã mở không?

Có. Lưu vào cùng một đường dẫn sẽ ghi đè lên tệp gốc:

asf::Presentation prs("deck.pptx");
// modify ...
prs.save("deck.pptx", asf::SaveFormat::PPTX); // overwrites original

Tôi có thể lưu vào bộ đệm bộ nhớ thay vì tệp không?

Lưu trực tiếp vào một std::vector<uint8_t> hoặc std::ostream không được hỗ trợ trong API hiện tại. Lưu vào một tệp tạm thời và đọc các byte:

#include <filesystem>
#include <fstream>
#include <vector>

auto tmp = std::filesystem::temp_directory_path() / "temp.pptx";
prs.save(tmp.string(), asf::SaveFormat::PPTX);

std::ifstream in(tmp, std::ios::binary);
std::vector<uint8_t> bytes((std::istreambuf_iterator<char>(in)),
                            std::istreambuf_iterator<char>());
std::filesystem::remove(tmp);

Việc lưu có giữ lại nội dung mà tôi chưa chỉnh sửa không?

Có. Các phần XML không xác định từ tệp gốc được giữ nguyê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.


Xem thêm

 Tiếng Việt