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 형식으로 프레젠테이션 저장
Strict 프로파일의 Office Open XML을 준수하는 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()
Note
섬네일 새로 고침을 비활성화하면 PPTX 파일 저장에 소요되는 시간을 줄일 수 있습니다.저장 진행률을 백분율로 보고
저장 작업을 모니터링하려면 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()
Note
Aspose 는 Aspose.Slides API 로 구축된 무료 PowerPoint Splitter 를 제공합니다. 선택한 슬라이드를 프레젠테이션에서 별도의 PPT 또는 PPTX 파일로 저장합니다.FAQ
Aspose.Slides 가 증분 저장 또는 “빠른 저장”을 지원합니까?
아니요. 각 저장 작업은 변경된 부분만 업데이트하는 것이 아니라 전체 출력 파일을 씁니다.
여러 스레드가 동일한 Presentation 인스턴스를 저장할 수 있습니까?
아니요. Presentation 인스턴스는 스레드에 안전하지 않음. 각 인스턴스는 한 번에 하나의 스레드에서만 접근하고 저장해야 합니다.
프레젠테이션을 저장할 때 하이퍼링크와 외부 연결 파일은 어떻게 됩니까?
Hyperlinks 은 프레젠테이션에 그대로 남습니다. Aspose.Slides 는 외부 연결 파일을 복사하지 않으므로 저장된 프레젠테이션은 여전히 해당 위치에 접근할 수 있어야 합니다.
작성자, 제목, 회사, 생성 날짜 등 문서 메타데이터를 저장할 수 있습니까?
예. 저장하기 전에 적절한 document properties 를 설정하면 Aspose.Slides 가 이를 출력 파일에 기록합니다.