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ạng | Giá trị Enum | Được hỗ trợ |
|---|---|---|
| PPTX (Office Open XML) | SaveFormat.PPTX | Có |
| N/A | Không | |
| HTML | N/A | Không |
| SVG | N/A | Không |
| PNG / JPEG | N/A | Không |
| ODP (OpenDocument) | N/A | Khô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.