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 saves presentations exclusively to .pptx định dạng bằ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 luôn sử dụng try-with-resources. Lệnh lưu phải được thực hiện 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 thay đổi

Đặt save() lệnh gọi là câu lệnh cuối cùng 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

Cung cấp 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);
}

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


Bước 5: Xác minh Kết quả

Sau khi khối try kết thúc, tệp đã hoàn thiện và được đóng. Kiểm tra xem 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ợ

Định dạngGiá trị EnumĐược hỗ trợ
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 được hỗ trợ đầy đủ. Việc truyền bất kỳ định dạng nào khác SaveFormat giá trị cho prs.save(path, format) tự động lưu dưới dạng PPTX — không có ngoại lệ nào được ném và đối số format 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 format.


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 hiện trố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, Presentation đối tượng bị giải phóng và các lần 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) — the ISaveOptionsoverload dựa trên - chưa được triển khai. Lưu ý: truyền một tệp không phải PPTX SaveFormat đến prs.save(path, format) thì không ném ngoại lệ này; nó tự động lưu dưới dạng PPTX.


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

Tôi 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 một OutputStream không?

Có. Phương thức save() phương thức 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);
}

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

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


Xem thêm

 Tiếng Việt