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 메서드에 전달합니다. 이 방식은 출력이 웹 서비스에서 반환되거나 데이터베이스에 저장되거나 메모리에서 처리되어야 할 때 유용합니다.

다음 예제는 새 프레젠테이션을 파일 스트림에 저장합니다:

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 확장은 해당 크기 및 항목 수 제한을 늘립니다.

Aspose.Slides가 ZIP64 확장을 쓸지 여부를 제어하려면 PptxOptions.setZip64Mode 메서드를 사용하십시오:

  • 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 인스턴스는 스레드 안전하지 않습니다. 각 인스턴스는 한 번에 하나의 스레드만 접근 및 저장해야 합니다.

프레젠테이션을 저장할 때 하이퍼링크와 외부 연결 파일은 어떻게 됩니까?

Hyperlinks 는 프레젠테이션에 그대로 남습니다. Aspose.Slides는 외부 연결 파일을 복사하지 않으므로 저장된 프레젠테이션은 여전히 해당 위치에 접근할 수 있어야 합니다.

작성자, 제목, 회사, 생성 날짜와 같은 문서 메타데이터를 저장할 수 있나요?

네. 저장하기 전에 적절한 문서 속성을 설정하면 Aspose.Slides가 이를 출력 파일에 기록합니다.