Как сохранять презентации в Java

Как сохранять презентации в 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Да
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-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‑данные пропускает без изменений.


См. также

 Русский