วิธีบันทึกงานนำเสนอใน 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";รูปแบบการบันทึกที่รองรับ
| Format | Enum Value | Supported |
|---|---|---|
| PPTX (Office Open XML) | SaveFormat::PPTX | ใช่ |
| N/A | ไม่ | |
| HTML | N/A | ไม่ |
| SVG | N/A | ไม่ |
| PNG / JPEG | N/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 ใด ๆ ที่มันไม่รู้จัก.