Как сохранять презентации в 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");

Поддерживаемый формат сохранения

ФорматЗначение перечисленияПоддерживается
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) — перегрузка на основе ISaveOptions не реализована. Примечание: передача не‑PPTX SaveFormat в 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, который она не распознает.


См. также

 Русский