วิธีบันทึกงานนำเสนอใน C++

วิธีบันทึกงานนำเสนอใน C++

Aspose.Slides FOSS for C++ บันทึกงานนำเสนอโดยเฉพาะเป็นรูปแบบ .pptx โดยใช้ prs.save(path, SaveFormat::PPTX). คู่มือนี้ครอบคลุมรูปแบบการบันทึกที่ถูกต้อง, การบันทึกไปยังเส้นทางอื่น, และข้อผิดพลาดทั่วไปที่เกี่ยวกับการบันทึก.

คู่มือแบบขั้นตอนต่อขั้นตอน

ขั้นตอนที่ 1: สร้างและเชื่อมโยงไลบรารี

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 .

ขั้นตอนที่ 2: เปิดหรือสร้างงานนำเสนอ

ใช้การจัดสรรบนสแตกเพื่อให้ตัวทำลายทำความสะอาดโดยอัตโนมัติ. เรียก save() ก่อนที่วัตถุจะออกจากขอบเขต.

#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;
}

ขั้นตอนที่ 3: บันทึกหลังจากการแก้ไขทั้งหมด

วางการเรียก save() หลังจากการแก้ไขทั้งหมดเสร็จสิ้นแล้ว, แต่ก่อนที่ Presentation จะออกจากขอบเขต.

#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;
}

ขั้นตอนที่ 4: บันทึกไปยังเส้นทางอื่น

ระบุเส้นทางเอาต์พุตที่แตกต่างเพื่อสร้างไฟล์ใหม่โดยไม่แก้ไขไฟล์ต้นฉบับ:

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

ไฟล์ template.pptx ไม่ถูกแก้ไข; customized.pptx ถูกสร้าง (หรือเขียนทับหากมีอยู่แล้ว).


ขั้นตอนที่ 5: ตรวจสอบผลลัพธ์

หลังจากบันทึก ตรวจสอบว่าไฟล์มีอยู่:

#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";

รูปแบบการบันทึกที่รองรับ

FormatEnum ValueSupported
PPTX (Office Open XML)SaveFormat::PPTXใช่
PDFN/Aไม่
HTMLN/Aไม่
SVGN/Aไม่
PNG / JPEGN/Aไม่
ODP (OpenDocument)N/Aไม่

รองรับเฉพาะ PPTX เท่านั้น การพยายามบันทึกในรูปแบบอื่นใดจะทำให้เกิดข้อยกเว้น.


ปัญหาทั่วไปและการแก้ไข

ข้อผิดพลาดการปฏิเสธสิทธิ์ในการเขียน

ไฟล์ผลลัพธ์กำลังเปิดอยู่ในแอปพลิเคชันอื่น (เช่น PowerPoint มีไฟล์เปิดอยู่) ปิดไฟล์ในแอปพลิเคชันอื่นก่อนบันทึก.

ไฟล์ถูกสร้างแล้วแต่ดูเหมือนว่างเปล่าหรือเสียหาย

ตรวจสอบให้แน่ใจว่า prs.save() ถูกเรียกก่อนที่วัตถุ Presentation จะถูกทำลาย หลังจากการทำลาย สถานะภายในจะถูกปล่อยและการเรียกต่อไปจะล้มเหลวหรือให้ผลลัพธ์ที่ไม่ถูกต้อง.

ข้อยกเว้นเมื่อบันทึก

สิ่งนี้เกิดขึ้นเมื่อพยายามบันทึกในรูปแบบที่ไม่ใช่ PPTX หรือเมื่อใช้ฟีเจอร์ที่ไม่รองรับ (เช่น แผนภูมิหรือแอนิเมชัน) ระหว่างการบันทึก.


คำถามที่พบบ่อย

ฉันสามารถบันทึกลงไฟล์เดียวกันที่เปิดไว้ได้หรือไม่?

ใช่ การบันทึกไปยังเส้นทางเดียวกันจะเขียนทับไฟล์ต้นฉบับ:

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

ฉันสามารถบันทึกลงบัฟเฟอร์หน่วยความจำแทนไฟล์ได้หรือไม่?

การบันทึกโดยตรงไปยัง std::vector<uint8_t> หรือ std::ostream ไม่ได้รับการสนับสนุนใน API ปัจจุบัน ให้บันทึกไปยังไฟล์ชั่วคราวแล้วอ่านไบต์:

#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);

การบันทึกจะคงเนื้อหาที่ฉันไม่ได้แก้ไขไว้หรือไม่?

ใช่. ส่วน XML ที่ไม่รู้จักจากไฟล์ต้นฉบับจะถูกเก็บไว้ตามต้นฉบับโดยตรง. ไลบรารีจะทำการซีเรียลไลซ์เฉพาะส่วนของโมเดลเอกสารที่มันเข้าใจเท่านั้น, และส่งต่อ XML ใด ๆ ที่มันไม่รู้จัก.


ดูเพิ่มเติม

 ภาษาไทย