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

วิธีบันทึกงานนำเสนอใน 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ใช่
PDFN/Aไม่
HTMLN/Aไม่
SVGN/Aไม่
PNG / JPEGN/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 ใด ๆ ที่มันไม่รู้จัก.


ดูเพิ่มเติม

 ภาษาไทย