Сохранение презентаций в Java

Обзор

Open Presentations in Java описал, как использовать класс Presentation для открытия презентации. В этой статье объясняется, как создавать и сохранять презентации. Класс Presentation содержит содержимое презентации. Независимо от того, создаёте ли вы презентацию с нуля или изменяете существующую, вам понадобится сохранить её после завершения работы. С помощью Aspose.Slides for Java вы можете сохранять в файл или поток. Эта статья объясняет различные способы сохранения презентации.

Сохранение презентаций в файлы

Сохранить презентацию в файл можно, вызвав метод save класса Presentation. Передайте в метод имя файла и формат сохранения. В следующем примере показано, как сохранить презентацию с помощью Aspose.Slides.

import com.aspose.slides.*;

// Создайте экземпляр класса Presentation, который представляет файл презентации.
Presentation presentation = new Presentation();
try {
    // Выполните здесь некоторые действия...

    // Сохраните презентацию в файл.
    presentation.save("Output.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Сохранение презентаций в потоки

Вы можете сохранить презентацию в поток, передав выходной поток методу save класса Presentation. Презентацию можно записать во множество типов потоков. В примере ниже мы создаём новую презентацию и сохраняем её в файловый поток.

import com.aspose.slides.*;
import java.io.FileOutputStream;
import java.io.OutputStream;

// Создайте экземпляр класса Presentation, который представляет файл презентации.
Presentation presentation = new Presentation();
try {
    OutputStream fileStream = new FileOutputStream("Output.pptx");
    try {
        // Сохраните презентацию в поток.
        presentation.save(fileStream, SaveFormat.Pptx);
    } finally {
        fileStream.close();
    }
} finally {
    presentation.dispose();
}

Сохранение презентаций с предопределённым типом представления

Aspose.Slides позволяет задать начальное представление, которое PowerPoint использует при открытии сгенерированной презентации, с помощью класса ViewProperties. Используйте метод setLastView с значением из перечисления ViewType.

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    presentation.getViewProperties().setLastView(ViewType.SlideMasterView);
    presentation.save("SlideMasterView.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Сохранение презентаций в строгом формате Office Open XML

Aspose.Slides позволяет сохранять презентацию в строгом формате Office Open XML. Используйте класс PptxOptions и установите его свойство conformance при сохранении. Если задать Conformance.Iso29500_2008_Strict, файл будет сохранён в строгом формате Office Open XML.

В примере ниже создаётся презентация и сохраняется в строгом формате Office Open XML.

import com.aspose.slides.*;

PptxOptions options = new PptxOptions();
options.setConformance(Conformance.Iso29500_2008_Strict);

// Создайте экземпляр класса Presentation, который представляет файл презентации.
Presentation presentation = new Presentation();
try {
    // Сохраните презентацию в строгом формате Office Open XML.
    presentation.save("StrictOfficeOpenXml.pptx", SaveFormat.Pptx, options);
} finally {
    presentation.dispose();
}

Сохранение презентаций в формате Office Open XML в режиме Zip64

Файл Office Open XML представляет собой ZIP‑ар­хив, который накладывает ограничения в 4 ГБ (2^32 байт) на несжатый размер любого файла, сжатый размер любого файла и общий размер архива, а также ограничивает количество файлов в архиве до 65 535 (2^16‑1). Расширения формата ZIP64 повышают эти ограничения до 2^64.

Метод IPptxOptions.setZip64Mode позволяет выбрать, когда использовать расширения формата ZIP64 при сохранении файла Office Open XML.

Этот метод можно использовать со следующими режимами:

  • IfNecessary использует расширения формата ZIP64 только если презентация превышает указанные выше ограничения. Это режим по умолчанию.
  • Never никогда не использует расширения формата ZIP64.
  • Always всегда использует расширения формата ZIP64.

В следующем коде демонстрируется, как сохранить презентацию в файл PPTX с включёнными расширениями формата ZIP64:

import com.aspose.slides.*;

PptxOptions pptxOptions = new PptxOptions();
pptxOptions.setZip64Mode(Zip64Mode.Always);

Presentation presentation = new Presentation("Sample.pptx");
try {
    presentation.save("OutputZip64.pptx", SaveFormat.Pptx, pptxOptions);
} finally {
    presentation.dispose();
}

Сохранение презентаций в формате Office Open XML с уровнями сжатия

При работе с большими презентациями вы можете регулировать уровень сжатия, чтобы сбалансировать размер файла и время обработки. В зависимости от требований вы можете предпочитать более быструю обработку или меньший размер окончательного файла.

Aspose.Slides предоставляет метод IPptxOptions.setCompressionLevel, который позволяет указать уровень сжатия, используемый при сохранении презентации в формате Office Open XML.

Доступны следующие уровни сжатия:

  • None: Сжатие не применяется. Файлы сохраняются как есть.
  • Level1: Самое быстрое сжатие с наименьшим коэффициентом сжатия.
  • Level2: Более быстрое сжатие с немного лучшим коэффициентом сжатия, чем Level1.
  • Level3: Обеспечивает лучшее сжатие, чем Level2, со средним влиянием на время обработки.
  • Level4: Обеспечивает лучшее сжатие, чем Level3.
  • Level5: Обеспечивает улучшенное сжатие по сравнению с Level4, но требует дополнительного времени обработки.
  • Level6: Стандартное сжатие, обеспечивающее хороший баланс между скоростью обработки и размером файла. Это уровень сжатия по умолчанию.
  • Level7: Обеспечивает лучшее сжатие, чем Level6, но с более медленной обработкой.
  • Level8: Обеспечивает лучшее сжатие, чем Level7.
  • Level9: Максимальное сжатие. Даёт минимальный размер файла, но требует самое длительное время обработки.

В следующем примере демонстрируется, как сохранить презентацию в файл PPTX без сжатия:

import com.aspose.slides.*;

PptxOptions pptxOptions = new PptxOptions();
pptxOptions.setCompressionLevel(CompressionLevel.None);

Presentation presentation = new Presentation("Sample.pptx");
try {
    presentation.save("Sample-out.pptx", SaveFormat.Pptx, pptxOptions);
} finally {
    presentation.dispose();
}

Этот пример показывает, как сохранить презентацию в файл PPTX с максимальным сжатием:

import com.aspose.slides.*;

PptxOptions pptxOptions = new PptxOptions();
pptxOptions.setCompressionLevel(CompressionLevel.Level9);

Presentation presentation = new Presentation("Sample.pptx");
try {
    presentation.save("Sample-level9.pptx", SaveFormat.Pptx, pptxOptions);
} finally {
    presentation.dispose();
}

Сохранение презентаций без обновления миниатюры

Метод PptxOptions.setRefreshThumbnail управляет генерацией миниатюры при сохранении презентации в PPTX:

  • Если установлено true, миниатюра обновляется во время сохранения. Это значение по умолчанию.
  • Если установлено false, текущая миниатюра сохраняется. Если у презентации нет миниатюры, она не будет сгенерирована.

В коде ниже презентация сохраняется в PPTX без обновления её миниатюры.

import com.aspose.slides.*;

PptxOptions pptxOptions = new PptxOptions();
pptxOptions.setRefreshThumbnail(false);

Presentation presentation = new Presentation("Sample.pptx");
try {
    presentation.save("Output.pptx", SaveFormat.Pptx, pptxOptions);
}
finally {
    presentation.dispose();
}

Обновления прогресса сохранения в процентах

Интерфейс IProgressCallback используется через метод setProgressCallback, предоставляемый интерфейсом ISaveOptions и абстрактным классом SaveOptions. Присвойте реализацию IProgressCallback с помощью setProgressCallback, чтобы получать обновления прогресса сохранения в процентах.

В следующем фрагменте кода показано, как использовать IProgressCallback.

import com.aspose.slides.*;

class ExportProgressHandler implements IProgressCallback {
    public void reporting(double progressValue) {
        // Используйте здесь значение процента прогресса.
        int progress = (int) progressValue;

        System.out.println(progress + "% of the file has been converted.");
    }
}

ISaveOptions saveOptions = new PdfOptions();
saveOptions.setProgressCallback(new ExportProgressHandler());

Presentation presentation = new Presentation("Sample.pptx");
try {
    presentation.save("Output.pdf", SaveFormat.Pdf, saveOptions);
} finally {
    presentation.dispose();
}

FAQ

Поддерживается ли «быстрое сохранение» (инкрементное сохранение), при котором записываются только изменения?

Нет. При сохранении каждый раз создаётся полный целевой файл; инкрементное «быстрое сохранение» не поддерживается.

Безопасно ли сохранять один и тот же объект Presentation из нескольких потоков?

Нет. Экземпляр Presentation не является потокобезопасным; сохраняйте его из одного потока.

Что происходит с гиперссылками и внешними связанными файлами при сохранении?

Гиперссылки сохраняются. Внешние связанные файлы (например, видео по относительным путям) не копируются автоматически — убедитесь, что указанные пути остаются доступными.

Можно ли установить/сохранить метаданные документа (Автор, Название, Компания, Дата)?

Да. Стандартные свойства документа поддерживаются и будут записаны в файл при сохранении.