Python via Java でプレゼンテーションを保存する

概要

プレゼンテーションを作成するか、既存のプレゼンテーションを開くした後、Presentation.save メソッドを使用して結果を書き込みます。Aspose.Slides for Python via Java は、PowerPoint、OpenDocument、PDF などの形式でプレゼンテーションをファイルまたはストリームに保存できます。以下のセクションでは、標準的な保存操作と PPTX 出力に利用できるオプションについて説明します。

プレゼンテーションをファイルに保存する

プレゼンテーションをファイルに保存するには、出力パスと SaveFormat の値を Presentation.save メソッドに渡します。フォーマットの値は、Aspose.Slides が作成するファイルの種類を決定します。

次の例はプレゼンテーションを作成し、PPTX ファイルとして保存します。

import jpype
import asposeslides

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

from asposeslides.api import Presentation, SaveFormat

presentation = Presentation()
try:
    # ここにプレゼンテーションのコンテンツを追加または変更します。

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

プレゼンテーションを元の形式で保存する

バッチ処理アプリケーションでは、入力形式が事前に分からないことがあります。ファイルを読み込んだ後、Presentation.getSourceFormat メソッドから元の形式を取得します。得られた SourceFormat の値を SlideUtil.toSaveFormat に渡して対応する SaveFormat の値を取得し、Presentation.save で修正されたプレゼンテーションを書き込みます。

次の完全な例は、入力ディレクトリ内のすべてのファイルを処理し、タイトルを更新した後、読み込んだ形式のまま出力ディレクトリに保存します。

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 は 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 メソッドに渡します。この方法は、出力を Web サービスから返す必要がある場合、データベースに保存する場合、またはメモリ内で処理する場合に便利です。

次の例は新しいプレゼンテーションをファイルストリームに保存します。

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()

事前定義されたビュータイプで保存する

保存されたプレゼンテーションを PowerPoint が最初に開くときのビューを指定できます。ViewProperties.setLastView メソッドに ViewType の値を渡してから保存してください。

次の例はスライドマスタービューを初期ビューとして設定します。

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()

Strict Office Open XML 形式で保存する

Office Open XML の Strict プロファイルに準拠した PPTX ファイルを作成するには、PptxOptions インスタンスを作成し、setConformance メソッドに Conformance.Iso29500_2008_Strict を渡します。その後、オプションを 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()

ZIP64 モードで Office Open XML 形式で保存する

標準の ZIP アーカイブは、各エントリの圧縮サイズ・非圧縮サイズ、アーカイブ全体のサイズ、エントリ数に制限があります。PPTX ファイルは ZIP アーカイブであるため、非常に大きなプレゼンテーションはこれらの制限を超えることがあります。ZIP64 拡張はサイズとエントリ数の制限を引き上げます。

PptxOptions.setZip64Mode メソッドを使用して、Aspose.Slides が ZIP64 拡張を書き込むかどうかを制御します。

  • IfNecessary はプレゼンテーションが標準 ZIP 制限を超えた場合にのみ ZIP64 を使用します。これがデフォルトモードです。
  • Never は ZIP64 拡張を無効にします。
  • Always は常に ZIP64 拡張を書き込みます。

次の例は出力プレゼンテーションに対して常に ZIP64 拡張を有効にします。

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()

圧縮レベルを指定して Office Open XML 形式で保存する

PPTX 出力では、PptxOptions.setCompressionLevel メソッドを使用して、保存速度とファイルサイズのバランスを調整できます。CompressionLevel クラスは次の値を提供します。

  • None は圧縮せずにデータを保存します。
  • Level1 は最速の圧縮で、最も大きな圧縮後サイズになります。
  • Level2 から Level5 は、保存速度よりも小さな出力を優先します。
  • Level6 は保存速度とファイルサイズのバランスを取ります。これがデフォルトです。
  • Level7 および Level8 は、さらに小さな出力を優先します。
  • Level9 は最強の圧縮を行い、最も多くの処理時間が必要です。

次の例は圧縮なしでプレゼンテーションを保存します。

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()

次の例は最大圧縮レベルで保存します。

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()

サムネイルを更新せずに保存する

プレゼンテーションを PPTX として保存する場合、PptxOptions.setRefreshThumbnail メソッドでドキュメントサムネイルの更新を制御できます。

  • True は保存時にサムネイルを再生成します。これがデフォルトです。
  • False は既存のサムネイルを保持します。プレゼンテーションにサムネイルがない場合、Aspose.Slides は生成しません。

次の例はサムネイルを更新せずにプレゼンテーションを保存します。

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()

保存進行状況をパーセンテージで報告する

保存操作の進行状況を監視するには、jpype.JProxy を使用して Python のプログレスハンドラを登録し、SaveOptions.setProgressCallback メソッドに渡します。Aspose.Slides はエクスポート中にハンドラの reporting メソッドを呼び出し、進行状況の値を渡します。

次の例は PDF エクスポートの進行状況をコンソールに出力します。

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

Aspose.Slides はインクリメンタル保存または「高速保存」をサポートしていますか?

いいえ。各保存操作は変更された部分だけを更新するのではなく、完全な出力ファイルを書き込みます。

複数のスレッドから同じ Presentation インスタンスを保存できますか?

いいえ。Presentation インスタンスはスレッドセーフではありません。各インスタンスへのアクセスと保存は同時に 1 つのスレッドからのみ行ってください。

プレゼンテーションを保存すると、ハイパーリンクや外部リンクされたファイルはどうなりますか?

ハイパーリンクはプレゼンテーション内に残ります。Aspose.Slides は外部リンクされたファイルをコピーしないため、保存されたプレゼンテーションは引き続きそれらの場所にアクセスできる必要があります。

作者、タイトル、会社、作成日などのドキュメントメタデータを保存できますか?

はい。保存前に適切なドキュメントプロパティを設定すれば、Aspose.Slides がそれらを出力ファイルに書き込みます。