Сохранение презентаций в Java
Обзор
После того как вы создадите презентацию или откроете существующую, используйте метод Presentation.save для записи результата. Aspose.Slides for Java может сохранять презентацию в файл или поток в форматах PowerPoint, OpenDocument, PDF и других. В следующих разделах рассматриваются стандартные операции сохранения и доступные параметры вывода PPTX.
Сохранение презентаций в файлы
Чтобы сохранить презентацию в файл, передайте путь вывода и значение SaveFormat в метод Presentation.save. Значение формата определяет тип файла, создаваемого Aspose.Slides.
Следующий пример создает презентацию и сохраняет её как файл PPTX:
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
Presentation presentation = new Presentation();
try {
// Добавьте или измените содержимое презентации здесь.
presentation.save("Output.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Сохранение презентаций в их исходном формате
Для примеров обнаружения файлов и потоков, поведения новосозданных презентаций и различий между исходным и выходным форматами см. Determine the Original Presentation Format.
В пакетном приложении формат входных данных может быть неизвестен заранее. После загрузки файла прочитайте его исходный формат с помощью метода IPresentation.getSourceFormat. Передайте полученное значение SourceFormat в SlideUtil.toSaveFormat, чтобы получить соответствующее значение SaveFormat, а затем используйте Presentation.save для записи изменённой презентации.
Следующий полный пример обрабатывает каждый файл во входном каталоге, обновляет его заголовок и сохраняет в выходной каталог в том формате, из которого он был загружен:
import com.aspose.slides.Presentation;
import com.aspose.slides.SlideUtil;
import java.io.File;
File inputDirectory = new File("Input");
File outputDirectory = new File("Output");
if (!outputDirectory.exists() && !outputDirectory.mkdirs()) {
System.err.println("Cannot create the output directory.");
}
File[] inputFiles = inputDirectory.listFiles(File::isFile);
if (inputFiles != null && outputDirectory.isDirectory()) {
for (File inputFile : inputFiles) {
try {
Presentation presentation = new Presentation(inputFile.getPath());
try {
int saveFormat = SlideUtil.toSaveFormat(presentation.getSourceFormat());
presentation.getDocumentProperties().setTitle("Processed by the batch application");
File outputFile = new File(outputDirectory, inputFile.getName());
presentation.save(outputFile.getPath(), saveFormat);
} finally {
presentation.dispose();
}
} catch (IllegalArgumentException exception) {
System.err.println("Cannot map the source format of '" + inputFile.getPath() + "': " + exception.getMessage());
} catch (Exception exception) {
System.err.println("Cannot process '" + inputFile.getPath() + "': " + exception.getMessage());
}
}
}
SlideUtil.toSaveFormat сопоставляет PPT, PPTX, ODP, PPTM, PPSX, PPSM, POTX, POTM, PPS, POT, OTP, FODP и PowerPoint XML их соответствующим форматам сохранения презентаций. Он отображает только исходные форматы презентаций; он не предназначен для выбора форматов экспорта, таких как PDF, HTML, TIFF или изображения. Передача неподдерживаемого или неверного значения SourceFormat приводит к IllegalArgumentException.
Унаследованные файлы PPT, PPS и POT используют один и тот же бинарный контейнер. Когда такая презентация загружается из потока без расширения файла, файл PPS или POT может быть идентифицирован как PPT. Если необходимо сохранить эти устаревшие подтипы, сохраняйте оригинальное имя файла или метаданные формата отдельно и используйте их при выборе имени выходного файла и формата.
Сохранение презентаций в потоки
Чтобы сохранить презентацию, не полагаясь на конечный путь к файлу, передайте поток для записи и значение SaveFormat в метод Presentation.save. Этот подход полезен, когда вывод необходимо вернуть из веб‑службы, сохранить в базе данных или обработать в памяти.
Следующий пример сохраняет новую презентацию в поток файла:
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
import java.io.FileOutputStream;
import java.io.OutputStream;
Presentation presentation = new Presentation();
try {
OutputStream outputStream = new FileOutputStream("Output.pptx");
try {
presentation.save(outputStream, SaveFormat.Pptx);
} finally {
outputStream.close();
}
} finally {
presentation.dispose();
}
Сохранение презентаций с предопределённым типом представления
Вы можете указать представление, в котором PowerPoint изначально открывает сохранённую презентацию. Используйте метод ViewProperties.setLastView с значением ViewType перед сохранением.
Следующий пример настраивает представление Slide Master как начальное представление:
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
import com.aspose.slides.ViewType;
Presentation presentation = new Presentation();
try {
presentation.getViewProperties().setLastView(ViewType.SlideMasterView);
presentation.save("SlideMasterView.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Сохранение презентаций в строгом формате Office Open XML
Чтобы создать файл PPTX, соответствующий строгому профилю Office Open XML, создайте экземпляр PptxOptions и используйте его метод setConformance с параметром Conformance.Iso29500_2008_Strict. Затем передайте параметры в метод Presentation.save.
import com.aspose.slides.Conformance;
import com.aspose.slides.PptxOptions;
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
PptxOptions options = new PptxOptions();
options.setConformance(Conformance.Iso29500_2008_Strict);
Presentation presentation = new Presentation();
try {
presentation.save("StrictOfficeOpenXml.pptx", SaveFormat.Pptx, options);
} finally {
presentation.dispose();
}
Сохранение презентаций в формате Office Open XML в режиме Zip64
Стандартный ZIP‑архив ограничивает сжатый и несжатый размер каждой записи, общий размер архива и количество записей. Поскольку файл PPTX является ZIP‑архивом, очень большая презентация может превышать эти ограничения. Расширения ZIP64 повышают соответствующие лимиты размера и количества записей.
Используйте метод PptxOptions.setZip64Mode для управления тем, будет ли Aspose.Slides записывать расширения ZIP64:
- IfNecessary использует ZIP64 только когда презентация превышает стандартные ограничения ZIP. Это режим по умолчанию.
- Never отключает ZIP64 расширения.
- Always всегда записывает ZIP64 расширения.
Следующий пример всегда включает ZIP64 расширения для выходной презентации:
import com.aspose.slides.PptxOptions;
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
import com.aspose.slides.Zip64Mode;
Presentation presentation = new Presentation("Sample.pptx");
try {
PptxOptions options = new PptxOptions();
options.setZip64Mode(Zip64Mode.Always);
presentation.save("OutputZip64.pptx", SaveFormat.Pptx, options);
} finally {
presentation.dispose();
}
Warning
Если используется Zip64Mode.Never и презентация не помещается в стандартные ограничения ZIP, операция сохранения бросает PptxException.Сохранение презентаций в формате Office Open XML с уровнями сжатия
Для вывода PPTX вы можете сбалансировать скорость сохранения и размер файла, используя метод PptxOptions.setCompressionLevel. Класс CompressionLevel предоставляет следующие значения:
- None сохраняет данные без сжатия.
- Level1 обеспечивает самое быстрое сжатие и наибольший размер сжатого вывода.
- Level2‑Level5 постепенно предпочитают более маленький вывод в ущерб скорости сохранения.
- Level6 балансирует скорость сохранения и размер файла. Это уровень по умолчанию.
- Level7 и Level8 дальше предпочитают более маленький вывод в ущерб скорости.
- Level9 обеспечивает самое сильное сжатие и требует наибольшего времени обработки.
Следующий пример сохраняет презентацию без сжатия:
import com.aspose.slides.CompressionLevel;
import com.aspose.slides.PptxOptions;
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
Presentation presentation = new Presentation("Sample.pptx");
try {
PptxOptions options = new PptxOptions();
options.setCompressionLevel(CompressionLevel.None);
presentation.save("OutputNoCompression.pptx", SaveFormat.Pptx, options);
} finally {
presentation.dispose();
}
Следующий пример использует максимальный уровень сжатия:
import com.aspose.slides.CompressionLevel;
import com.aspose.slides.PptxOptions;
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
Presentation presentation = new Presentation("Sample.pptx");
try {
PptxOptions options = new PptxOptions();
options.setCompressionLevel(CompressionLevel.Level9);
presentation.save("OutputMaximumCompression.pptx", SaveFormat.Pptx, options);
} finally {
presentation.dispose();
}
Сохранение презентаций без обновления миниатюры
Когда презентация сохраняется как PPTX, метод PptxOptions.setRefreshThumbnail управляет её миниатюрой документа:
trueвосстанавливает миниатюру во время операции сохранения. Это значение по умолчанию.falseсохраняет существующую миниатюру. Если у презентации нет миниатюры, Aspose.Slides её не генерирует.
Следующий пример сохраняет презентацию без обновления её миниатюры:
import com.aspose.slides.PptxOptions;
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
Presentation presentation = new Presentation("Sample.pptx");
try {
PptxOptions options = new PptxOptions();
options.setRefreshThumbnail(false);
presentation.save("Output.pptx", SaveFormat.Pptx, options);
} finally {
presentation.dispose();
}
Note
Отключение обновления миниатюры может сократить время, необходимое для сохранения файла PPTX.Обновления прогресса сохранения в процентах
Чтобы контролировать процесс сохранения, реализуйте интерфейс IProgressCallback и передайте реализацию в метод ISaveOptions.setProgressCallback. Aspose.Slides затем вызывает метод IProgressCallback.reporting с значениями прогресса во время экспорта.
Следующий пример выводит прогресс экспорта PDF в консоль:
import com.aspose.slides.IProgressCallback;
import com.aspose.slides.PdfOptions;
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
class ExportProgressHandler implements IProgressCallback {
public void reporting(double progressValue) {
int progress = (int) progressValue;
System.out.println(progress + "% of the file has been converted.");
}
}
PdfOptions options = new PdfOptions();
options.setProgressCallback(new ExportProgressHandler());
Presentation presentation = new Presentation("Sample.pptx");
try {
presentation.save("Output.pdf", SaveFormat.Pdf, options);
} finally {
presentation.dispose();
}
Note
Aspose предоставляет бесплатный PowerPoint Splitter, построенный на базе Aspose.Slides API. Он сохраняет выбранные слайды из презентации в отдельные файлы PPT или PPTX.FAQ
Поддерживает ли Aspose.Slides инкрементное или «быстрое сохранение»?
Нет. Каждая операция сохранения записывает полностью готовый выходной файл, а не обновляет только изменённые части.
Могут ли несколько потоков сохранять один и тот же объект Presentation?
Нет. Экземпляр Presentation не является потокобезопасным. Доступ к каждому экземпляру и его сохранение допускаются только из одного потока одновременно.
Что происходит с гиперссылками и внешними связанными файлами при сохранении презентации?
Гиперссылки остаются в презентации. Aspose.Slides не копирует внешние связанные файлы, поэтому сохранённой презентации всё равно необходимо иметь доступ к их расположениям.
Могу ли я сохранять метаданные документа, такие как автор, название, компания и дата создания?
Да. Установите соответствующие свойства документа перед сохранением, и Aspose.Slides запишет их в выходной файл.