Как сохранять презентации в Java
Aspose.Slides FOSS for Java saves presentations exclusively to .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. Вызов сохранения должен происходить внутри блока 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");Поддерживаемый формат сохранения
| Формат | Значение перечисления | Поддерживается |
|---|---|---|
| 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) — это ISaveOptions-based перегрузка не реализована. Примечание: передача не-PPTX SaveFormat к prs.save(path, format) делает не выбросить это исключение; он беззвучно сохраняет как PPTX.
Часто задаваемые вопросы
Можно ли сохранять в тот же файл, который я открыл?
Да. Сохранение в тот же путь перезаписывает оригинальный файл:
try (Presentation prs = new Presentation("deck.pptx")) {
// modify ...
prs.save("deck.pptx", SaveFormat.PPTX); // overwrites original
}Можно ли сохранять в OutputStream?
Да. The save() метод принимает OutputStream:
import java.io.FileOutputStream;
try (Presentation prs = new Presentation();
FileOutputStream fos = new FileOutputStream("output.pptx")) {
prs.save(fos, SaveFormat.PPTX);
}Сохраняет ли процесс сохранения содержимое, которое я не изменял?
Да. Неизвестные XML‑части из оригинального файла сохраняются дословно. Библиотека сериализует только те части модели документа, которые она понимает, а любые неизвестные ей XML‑данные пропускает без изменений.