Simpan Presentasi dalam Python via Java

Ikhtisar

Setelah Anda membuat presentasi atau buka yang sudah ada, gunakan metode Presentation.save untuk menulis hasilnya. Aspose.Slides for Python via Java dapat menyimpan presentasi ke file atau aliran dalam format PowerPoint, OpenDocument, PDF, dan format lainnya. Bagian berikut mencakup operasi penyimpanan standar dan opsi yang tersedia untuk output PPTX.

Simpan Presentasi ke File

Untuk menyimpan presentasi ke file, berikan jalur output dan nilai SaveFormat ke metode Presentation.save. Nilai format menentukan jenis file yang dibuat oleh Aspose.Slides.

Contoh berikut membuat presentasi dan menyimpannya sebagai file PPTX:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat

presentation = Presentation()
try:
    # Tambahkan atau ubah konten presentasi di sini.

    presentation.save("Output.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

Simpan Presentasi dalam Format Aslinya

Untuk contoh deteksi file dan aliran, perilaku presentasi yang baru dibuat, serta perbedaan antara format sumber dan output, lihat Determine the Original Presentation Format.

Dalam aplikasi pemrosesan batch, format masukan mungkin tidak diketahui sebelumnya. Setelah memuat file, baca format aslinya dari metode Presentation.getSourceFormat. Berikan nilai SourceFormat yang dihasilkan ke SlideUtil.toSaveFormat untuk memperoleh nilai SaveFormat yang sesuai, lalu gunakan Presentation.save untuk menulis presentasi yang telah dimodifikasi.

Contoh lengkap berikut memproses setiap file dalam direktori masukan, memperbarui judulnya, dan menyimpannya ke direktori keluaran dalam format yang sama dengan saat dimuat:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SlideUtil
from pathlib import Path

IllegalArgumentException = jpype.JClass("java.lang.IllegalArgumentException")
input_directory = Path("Input")
output_directory = Path("Output")

try:
    output_directory.mkdir(parents=True, exist_ok=True)
except OSError:
    print("Cannot create the output directory.")

if input_directory.is_dir() and output_directory.is_dir():
    for input_file in input_directory.iterdir():
        if input_file.is_file():
            try:
                presentation = Presentation(str(input_file))
                try:
                    save_format = SlideUtil.toSaveFormat(presentation.getSourceFormat())
                    presentation.getDocumentProperties().setTitle("Processed by the batch application")

                    output_file = output_directory / input_file.name
                    presentation.save(str(output_file), save_format)
                finally:
                    presentation.dispose()
            except IllegalArgumentException as exception:
                print(f"Cannot map the source format of '{input_file}': {exception}")
            except Exception as exception:
                print(f"Cannot process '{input_file}': {exception}")

SlideUtil.toSaveFormat memetakan PPT, PPTX, ODP, PPTM, PPSX, PPSM, POTX, POTM, PPS, POT, OTP, FODP, dan PowerPoint XML ke format penyimpanan presentasi yang sesuai. Ia hanya memetakan format sumber presentasi; bukan untuk memilih format ekspor seperti PDF, HTML, TIFF, atau gambar. Memberikan nilai SourceFormat yang tidak didukung atau tidak valid menghasilkan IllegalArgumentException.

File legacy PPT, PPS, dan POT menggunakan kontainer biner yang sama. Ketika presentasi semacam itu dimuat dari aliran tanpa ekstensi file, file PPS atau POT dapat diidentifikasi sebagai PPT. Jika diperlukan untuk mempertahankan subtipe legacy ini, simpan nama file atau metadata format asli secara terpisah dan gunakan saat memilih nama file dan format keluaran.

Simpan Presentasi ke Aliran

Untuk menulis presentasi tanpa bergantung pada jalur file akhir, berikan aliran yang dapat ditulis dan nilai SaveFormat ke metode Presentation.save. Pendekatan ini berguna ketika output harus dikembalikan dari layanan web, disimpan di basis data, atau diproses di memori.

Contoh berikut menyimpan presentasi baru ke aliran file:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat

FileOutputStream = jpype.JClass("java.io.FileOutputStream")

presentation = Presentation()
try:
    output_stream = FileOutputStream("Output.pptx")
    try:
        presentation.save(output_stream, SaveFormat.Pptx)
    finally:
        output_stream.close()
finally:
    presentation.dispose()

Simpan Presentasi dengan Tipe Tampilan yang Ditetapkan

Anda dapat menentukan tampilan di mana PowerPoint awalnya membuka presentasi yang disimpan. Gunakan metode ViewProperties.setLastView dengan nilai ViewType sebelum menyimpan.

Contoh berikut mengonfigurasi tampilan Slide Master sebagai tampilan awal:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat, ViewType

presentation = Presentation()
try:
    presentation.getViewProperties().setLastView(ViewType.SlideMasterView)
    presentation.save("SlideMasterView.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

Simpan Presentasi dalam Format Strict Office Open XML

Untuk membuat file PPTX yang mematuhi profil Strict dari Office Open XML, buat instance PptxOptions dan gunakan metode setConformance dengan Conformance.Iso29500_2008_Strict. Kemudian berikan opsi tersebut ke metode Presentation.save.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Conformance, PptxOptions, Presentation, SaveFormat

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

presentation = Presentation()
try:
    presentation.save("StrictOfficeOpenXml.pptx", SaveFormat.Pptx, options)
finally:
    presentation.dispose()

Simpan Presentasi dalam Format Office Open XML dalam Mode Zip64

Arsip ZIP standar membatasi ukuran terkompresi dan tidak terkompresi setiap entri, ukuran total arsip, dan jumlah entri. Karena file PPTX adalah arsip ZIP, presentasi yang sangat besar dapat melampaui batas tersebut. Ekstensi ZIP64 meningkatkan batas ukuran dan jumlah entri yang berlaku.

Gunakan metode PptxOptions.setZip64Mode untuk mengontrol apakah Aspose.Slides menulis ekstensi ZIP64:

  • IfNecessary menggunakan ZIP64 hanya ketika presentasi melebihi batas ZIP standar. Ini adalah mode default.
  • Never menonaktifkan ekstensi ZIP64.
  • Always selalu menulis ekstensi ZIP64.

Contoh berikut selalu mengaktifkan ekstensi ZIP64 untuk presentasi output:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import PptxOptions, Presentation, SaveFormat, Zip64Mode

presentation = Presentation("Sample.pptx")
try:
    options = PptxOptions()
    options.setZip64Mode(Zip64Mode.Always)

    presentation.save("OutputZip64.pptx", SaveFormat.Pptx, options)
finally:
    presentation.dispose()

Simpan Presentasi dalam Format Office Open XML dengan Tingkat Kompresi

Untuk output PPTX, Anda dapat menyeimbangkan kecepatan penyimpanan dengan ukuran file menggunakan metode PptxOptions.setCompressionLevel. Kelas CompressionLevel menyediakan nilai berikut:

  • None menyimpan data tanpa kompresi.
  • Level1 memberikan kompresi tercepat dan output terkompresi terbesar.
  • Level2 hingga Level5 secara progresif lebih mengutamakan output lebih kecil dibandingkan kecepatan penyimpanan.
  • Level6 menyeimbangkan kecepatan penyimpanan dan ukuran file. Ini adalah tingkat default.
  • Level7 dan Level8 lebih mengutamakan output lebih kecil dibandingkan kecepatan penyimpanan.
  • Level9 memberikan kompresi terkuat dan memerlukan waktu pemrosesan paling lama.

Contoh berikut menyimpan presentasi tanpa kompresi:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import CompressionLevel, PptxOptions, Presentation, SaveFormat

presentation = Presentation("Sample.pptx")
try:
    options = PptxOptions()
    options.setCompressionLevel(CompressionLevel.None_)

    presentation.save("OutputNoCompression.pptx", SaveFormat.Pptx, options)
finally:
    presentation.dispose()

Contoh berikut menggunakan tingkat kompresi maksimum:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import CompressionLevel, PptxOptions, Presentation, SaveFormat

presentation = Presentation("Sample.pptx")
try:
    options = PptxOptions()
    options.setCompressionLevel(CompressionLevel.Level9)

    presentation.save("OutputMaximumCompression.pptx", SaveFormat.Pptx, options)
finally:
    presentation.dispose()

Simpan Presentasi tanpa Menyegarkan Gambar Miniatur

Saat presentasi disimpan sebagai PPTX, metode PptxOptions.setRefreshThumbnail mengontrol gambar miniatur dokumen:

  • True menghasilkan kembali gambar miniatur selama operasi penyimpanan. Ini adalah nilai default.
  • False mempertahankan gambar miniatur yang ada. Jika presentasi tidak memiliki gambar miniatur, Aspose.Slides tidak membuatnya.

Contoh berikut menyimpan presentasi tanpa menyegarkan gambar miniaturnya:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import PptxOptions, Presentation, SaveFormat

presentation = Presentation("Sample.pptx")
try:
    options = PptxOptions()
    options.setRefreshThumbnail(False)

    presentation.save("Output.pptx", SaveFormat.Pptx, options)
finally:
    presentation.dispose()

Laporkan Progres Penyimpanan sebagai Persentase

Untuk memantau operasi penyimpanan, daftarkan handler progres Python melalui jpype.JProxy dan berikan ke metode SaveOptions.setProgressCallback. Aspose.Slides kemudian memanggil metode reporting handler dengan nilai progres selama ekspor.

Contoh berikut melaporkan progres ekspor PDF ke konsol:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import PdfOptions, Presentation, SaveFormat


class ExportProgressHandler:
    def reporting(self, progress_value):
        progress = int(progress_value)
        print(f"{progress}% of the file has been converted.")


handler = ExportProgressHandler()
callback = jpype.JProxy("com.aspose.slides.IProgressCallback", inst=handler)
options = PdfOptions()
options.setProgressCallback(callback)

presentation = Presentation("Sample.pptx")
try:
    presentation.save("Output.pdf", SaveFormat.Pdf, options)
finally:
    presentation.dispose()

FAQ

Apakah Aspose.Slides mendukung penyimpanan inkremental atau “fast save”?

Tidak. Setiap operasi penyimpanan menulis file output lengkap, bukan hanya memperbarui bagian yang berubah.

Bisakah beberapa thread menyimpan instance Presentation yang sama?

Tidak. Instance Presentation tidak thread‑safe (/slides/id/python-java/multithreading/). Akses dan simpan setiap instance hanya dari satu thread pada satu waktu.

Apa yang terjadi pada hyperlink dan file yang ditautkan secara eksternal ketika saya menyimpan presentasi?

Hyperlink tetap berada di dalam presentasi. Aspose.Slides tidak menyalin file yang ditautkan secara eksternal, sehingga presentasi yang disimpan tetap harus dapat mengakses lokasinya.

Bisakah saya menyimpan metadata dokumen seperti penulis, judul, perusahaan, dan tanggal pembuatan?

Ya. Tetapkan properti dokumen yang sesuai sebelum menyimpan, dan Aspose.Slides akan menuliskannya ke file output.