Cách Lưu Bản Trình Chiếu trong Java

Cách Lưu Bản Trình Chiếu trong Java

Aspose.Slides FOSS for Java lưu các bản trình chiếu duy nhất ở định dạng .pptx bằng cách 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: Thêm phụ thuộc Maven

<dependency>
  <groupId>org.aspose.slides.foss</groupId>
  <artifactId>aspose-slides-foss</artifactId>
  <version>1.0.0</version>
</dependency>

Bước 2: Mở hoặc Tạo một Bản trình chiếu

Luôn sử dụng try-with-resources. Lệnh gọi lưu phải xảy ra bên trong khối 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);
}

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

Đặt lời gọi save() làm câu lệnh cuối cùng bên trong khối try, sau khi tất cả các sửa đổi đã hoàn thành.

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

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

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

try (Presentation prs = new Presentation("template.pptx")) {
    // modify ...
    prs.save("customized.pptx", SaveFormat.PPTX);
}

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


Bước 5: Xác minh đầu ra

Sau khi khối try kết thúc, tệp đã hoàn thành và được đóng. Kiểm tra nó có tồn tại không:

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

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

FormatEnum ValueSupported
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ỉ PPTX mới được hỗ trợ đầy đủ. Việc truyền bất kỳ giá trị SaveFormat nào khác cho prs.save(path, format) sẽ im lặng lưu dưới dạng PPTX — không có ngoại lệ nào được ném và đối số định dạng bị bỏ qua. UnsupportedOperationException chỉ được ném bởi prs.save(ISaveOptions options), không phải bởi các overload dựa trên định dạng.


Các vấn đề thường gặp và cách khắc phục

java.io.IOException: Permission denied

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 trông rỗng hoặc bị hỏng

Đảm bảo prs.save() được gọi bên trong khối try, không phải sau nó. Sau khi khối try-with-resources kết thúc, đối tượng Presentation bị giải phóng và các lời gọi tiếp theo sẽ thất bại.

UnsupportedOperationException khi lưu

Điều này xảy ra khi sử dụng prs.save(ISaveOptions options) — overload dựa trên ISaveOptions chưa được triển khai. Lưu ý: việc truyền một SaveFormat không phải PPTX vào prs.save(path, format) không ném ra ngoại lệ này; nó sẽ lưu thành PPTX một cách im lặng.


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

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:

try (Presentation prs = new Presentation("deck.pptx")) {
    // modify ...
    prs.save("deck.pptx", SaveFormat.PPTX);  // overwrites original
}

Tôi có thể lưu vào OutputStream không?

Vâng. Phương thức save() chấp nhận một OutputStream:

import java.io.FileOutputStream;

try (Presentation prs = new Presentation();
     FileOutputStream fos = new FileOutputStream("output.pptx")) {
    prs.save(fos, SaveFormat.PPTX);
}

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

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


Xem thêm

 Tiếng Việt