วิธีบันทึกงานนำเสนอใน Java
Aspose.Slides FOSS for Java บันทึกงานนำเสนอโดยเฉพาะในรูปแบบ .pptx โดยใช้ prs.save(path, SaveFormat.PPTX). คู่มือนี้ครอบคลุมรูปแบบการบันทึกที่ถูกต้อง, การบันทึกไปยังเส้นทางอื่น, และข้อผิดพลาดทั่วไปที่เกี่ยวกับการบันทึก.
คู่มือแบบขั้นตอนต่อขั้นตอน
ขั้นตอนที่ 1: เพิ่มการพึ่งพา Maven
<dependency>
<groupId>org.aspose.slides.foss</groupId>
<artifactId>aspose-slides-foss</artifactId>
<version>1.0.0</version>
</dependency>ขั้นตอนที่ 2: เปิดหรือสร้างงานนำเสนอ
ควรใช้ try-with-resources เสมอ การเรียกใช้ save ต้องอยู่ภายในบล็อก try.
import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;
// Create new
try (Presentation prs = new Presentation()) {
prs.save("new.pptx", SaveFormat.PPTX);
}
// Open existing
try (Presentation prs = new Presentation("input.pptx")) {
prs.save("output.pptx", SaveFormat.PPTX);
}ขั้นตอนที่ 3: บันทึกหลังจากการแก้ไขทั้งหมด
วางการเรียก save() เป็นคำสั่งสุดท้ายภายในบล็อก try หลังจากการแก้ไขทั้งหมดเสร็จสิ้นแล้ว.
import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;
try (Presentation prs = new Presentation()) {
ISlide slide = prs.getSlides().get(0);
IAutoShape shape = slide.getShapes().addAutoShape(
ShapeType.RECTANGLE, 50, 50, 300, 100
);
shape.addTextFrame("Hello, World!");
prs.save("output.pptx", SaveFormat.PPTX);
}ขั้นตอนที่ 4: บันทึกไปยังเส้นทางอื่น
ระบุเส้นทางเอาต์พุตที่แตกต่างเพื่อสร้างไฟล์ใหม่โดยไม่แก้ไขไฟล์ต้นฉบับ:
try (Presentation prs = new Presentation("template.pptx")) {
// modify ...
prs.save("customized.pptx", SaveFormat.PPTX);
}ไฟล์ template.pptx ไม่ถูกแก้ไข; customized.pptx ถูกสร้าง (หรือเขียนทับหากมีอยู่แล้ว).
ขั้นตอนที่ 5: ตรวจสอบผลลัพธ์
หลังจากบล็อก try สิ้นสุด ไฟล์จะสมบูรณ์และถูกปิด ตรวจสอบว่ามีอยู่หรือไม่:
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
Path output = Paths.get("output.pptx");
System.out.println("Saved: " + Files.exists(output)
+ ", size: " + Files.size(output) + " bytes");รูปแบบการบันทึกที่รองรับ
| รูปแบบ | ค่า Enum | รองรับ |
|---|---|---|
| PPTX (Office Open XML) | SaveFormat.PPTX | ใช่ |
| N/A | ไม่ | |
| HTML | N/A | ไม่ |
| SVG | N/A | ไม่ |
| PNG / JPEG | N/A | ไม่ |
| ODP (OpenDocument) | N/A | ไม่ |
เฉพาะ PPTX เท่านั้นที่ได้รับการสนับสนุนอย่างเต็มที่. การส่งค่า SaveFormat ใด ๆ อื่นไปยัง prs.save(path, format) จะบันทึกเป็น PPTX อย่างเงียบ ๆ — ไม่ได้โยนข้อยกเว้นและอาร์กิวเมนต์รูปแบบจะถูกละเลย. UnsupportedOperationException จะถูกโยนออกเฉพาะโดย prs.save(ISaveOptions options) เท่านั้น ไม่ได้โดยการโอเวอร์โหลดที่อิงรูปแบบ.
ปัญหาทั่วไปและการแก้ไข
java.io.IOException: Permission denied
ไฟล์ผลลัพธ์กำลังเปิดอยู่ในแอปพลิเคชันอื่น (เช่น PowerPoint มีไฟล์เปิดอยู่) ปิดไฟล์ในแอปพลิเคชันอื่นก่อนบันทึก.
ไฟล์ถูกสร้างแล้วแต่ดูเหมือนว่างเปล่าหรือเสียหาย
ตรวจสอบให้แน่ใจว่า prs.save() ถูกเรียกภายในบล็อก try ไม่ใช่หลังจากนั้น หลังจากบล็อก try-with-resources สิ้นสุดลง วัตถุ Presentation จะถูกทำลายและการเรียกใช้ต่อไปจะล้มเหลว
UnsupportedOperationException เมื่อบันทึก
สิ่งนี้เกิดขึ้นเมื่อใช้ prs.save(ISaveOptions options) — การ overload ที่อิงจาก ISaveOptions ยังไม่ได้รับการ implement. หมายเหตุ: การส่ง SaveFormat ที่ไม่ใช่ PPTX ไปยัง prs.save(path, format) ไม่ ทำให้เกิดข้อยกเว้นนี้; มันจะบันทึกเป็น PPTX อย่างเงียบๆ.
คำถามที่พบบ่อย
ฉันสามารถบันทึกลงไฟล์เดียวกันที่เปิดไว้ได้หรือไม่?
ใช่ การบันทึกไปยังเส้นทางเดียวกันจะเขียนทับไฟล์ต้นฉบับ:
try (Presentation prs = new Presentation("deck.pptx")) {
// modify ...
prs.save("deck.pptx", SaveFormat.PPTX); // overwrites original
}ฉันสามารถบันทึกลง OutputStream ได้หรือไม่?
ใช่. เมธอด save() รับ OutputStream:
import java.io.FileOutputStream;
try (Presentation prs = new Presentation();
FileOutputStream fos = new FileOutputStream("output.pptx")) {
prs.save(fos, SaveFormat.PPTX);
}การบันทึกทำให้เนื้อหาที่ฉันไม่ได้แก้ไขยังคงอยู่หรือไม่?
ใช่. ส่วน XML ที่ไม่รู้จักจากไฟล์ต้นฉบับจะถูกเก็บไว้ตามต้นฉบับโดยตรง. ไลบรารีจะทำการซีเรียลไลซ์เฉพาะส่วนของโมเดลเอกสารที่มันเข้าใจเท่านั้น, และส่งต่อ XML ใด ๆ ที่มันไม่รู้จัก.