Python via Java를 사용하여 PowerPoint 프레젠테이션을 HTML로 변환
Overview
Aspose.Slides for Python via Java은 Microsoft PowerPoint 없이 PowerPoint 프레젠테이션을 HTML로 저장할 수 있습니다. 기본 변환은 단일 Presentation 로드와 save 호출에 SaveFormat을 사용하는 것입니다. 내보낸 레이아웃, 글꼴, 이미지, 노트, 주석, SVG 출력 또는 연결된 리소스를 제어해야 할 경우 HtmlOptions를 사용하십시오.
이 가이드는 실용적인 HTML 내보내기 시나리오에 초점을 맞춥니다:
- 전체 프레젠테이션 또는 선택한 슬라이드를 내보냅니다.
- 고정 레이아웃, 반응형, 또는 SVG 기반 HTML을 생성합니다.
- 발표자 노트와 주석을 포함합니다.
- 이미지 품질 및 잘라낸 이미지 데이터를 제어합니다.
- 글꼴을 임베드하거나 글꼴 파일을 별도로 저장합니다.
- 외부 리소스 및 미디어 파일이 작성되고 참조되는 방식을 선택합니다.
기본적으로 HTML 내보내기는 대부분의 리소스가 포함된 자체 포함 HTML 문서를 생성합니다. 하나의 파일을 공유하기에 편리하지만 출력 크기가 커질 수 있습니다. 웹 게시를 위해서는 외부 리소스 사용, 이미지 DPI 낮추기, 대상 환경에 신뢰할 수 있게 제공되지 않는 글꼴만 임베드하는 것을 고려하십시오.
Convert a Presentation to HTML
프레젠테이션을 HTML로 내보내려면 Presentation으로 로드하고 SaveFormat.Html으로 저장합니다.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat
presentation = Presentation("presentation.pptx")
try:
presentation.save("presentation.html", SaveFormat.Html)
finally:
presentation.dispose()
각 예제는 현재 작업 디렉터리에서 presentation.pptx를 로드합니다. 실행하기 전에 Aspose.Slides for Python via Java와 호환되는 Java 런타임을 설치하십시오. JVM은 Python 프로세스당 한 번 시작됩니다.
이 예제는 하나의 HTML 파일을 작성합니다. 프레젠테이션 객체는 finally 블록에서 해제되어 내보내기 후 파일 핸들과 렌더링 리소스를 해제합니다.
Configure HTML Export
HtmlOptions는 HTML 내보내기의 주요 구성 클래스입니다. 일반적인 설정은 다음과 같습니다:
- setSlidesLayoutOptions: 노트, 주석, 유인물 또는 기타 레이아웃 정보를 추가합니다.
- setHtmlFormatter: HTML 문서 구조를 변경하거나 포맷팅을 컨트롤러에 위임합니다.
- setSlideImageFormat: 슬라이드가 SVG와 같이 표시되는 방식을 변경합니다.
- setPicturesCompression: 이미지 DPI 및 출력 크기를 제어합니다.
- setDeletePicturesCroppedAreas: 잘라낸 이미지 데이터를 유지하거나 제거합니다.
- setSvgResponsiveLayout: 내보낸 SVG 콘텐츠가 컨테이너에 맞게 조정되도록 합니다.
- setShowHiddenSlides: 필요에 따라 숨겨진 슬라이드를 포함합니다.
다음 섹션에서는 가장 일반적인 옵션을 개별적으로 보여 주어 워크플로에 필요한 옵션만 조합할 수 있도록 합니다.
Convert Selected Slides to HTML
슬라이드 번호를 받아들이는 Presentation.save 오버로드는 1부터 시작하는 슬라이드 위치를 사용합니다. 아래 루프는 각 슬라이드를 별도의 HTML 파일로 저장합니다.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat
presentation = Presentation("presentation.pptx")
try:
slide_count = presentation.getSlides().size()
for slide_index in range(slide_count):
slide_number = slide_index + 1
slide_numbers = jpype.JArray(jpype.JInt)([slide_number])
html_file_name = f"slide-{slide_number}.html"
presentation.save(html_file_name, slide_numbers, SaveFormat.Html)
finally:
presentation.dispose()
웹사이트나 애플리케이션에서 슬라이드당 하나의 HTML 페이지가 필요할 때 이 패턴을 사용하십시오. 각 슬라이드에 동일한 레이아웃이 필요하면 하나의 HtmlOptions 인스턴스를 만들고 모든 Presentation.save 호출에 전달하십시오.
Create Responsive HTML
ResponsiveHtmlController는 HtmlFormatter를 통해 반응형 HTML 출력을 제공합니다. 내보낸 페이지가 브라우저 너비에 더 잘 맞도록 하려면 이를 사용하십시오.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import HtmlFormatter, HtmlOptions, Presentation, ResponsiveHtmlController, SaveFormat
presentation = Presentation("presentation.pptx")
try:
controller = ResponsiveHtmlController()
formatter = HtmlFormatter.createCustomFormatter(controller)
html_options = HtmlOptions()
html_options.setHtmlFormatter(formatter)
presentation.save("presentation-responsive.html", SaveFormat.Html, html_options)
finally:
presentation.dispose()
SVG 기반 반응형 레이아웃을 위해서는 True와 함께 HtmlOptions.setSvgResponsiveLayout를 호출하십시오. 슬라이드 내용이 확장 가능한 SVG 마크업으로 내보내질 때 유용합니다.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import HtmlOptions, Presentation, SaveFormat
presentation = Presentation("presentation.pptx")
try:
html_options = HtmlOptions()
html_options.setSvgResponsiveLayout(True)
presentation.save("presentation-svg-responsive.html", SaveFormat.Html, html_options)
finally:
presentation.dispose()
Include Speaker Notes and Comments
NotesCommentsLayoutingOptions을 HtmlOptions.setSlidesLayoutOptions를 통해 사용하면 발표자 노트나 주석을 포함할 수 있습니다. 기본적으로 노트와 주석은 숨겨져 있으며 위치를 지정해야 표시됩니다.
소스 프레젠테이션에 발표자 노트가 포함되어 있다고 가정합니다:

다음 코드는 슬라이드 아래에 발표자 노트를 포함하여 슬라이드 내용을 내보냅니다.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import HtmlOptions, NotesCommentsLayoutingOptions, NotesPositions, Presentation, SaveFormat
presentation = Presentation("presentation.pptx")
try:
layout_options = NotesCommentsLayoutingOptions()
layout_options.setNotesPosition(NotesPositions.BottomFull)
html_options = HtmlOptions()
html_options.setSlidesLayoutOptions(layout_options)
presentation.save("presentation-with-notes.html", SaveFormat.Html, html_options)
finally:
presentation.dispose()
내보낸 HTML에는 노트 영역이 포함됩니다:

주석을 내보내려면 NotesCommentsLayoutingOptions.setCommentsPosition를 호출하고 예를 들어 CommentsPositions.Right 또는 CommentsPositions.Bottom과 함께 사용하십시오. 주석만 필요하면 NotesCommentsLayoutingOptions.setNotesPosition를 생략하십시오. 노트와 주석을 모두 원한다면 두 메서드를 모두 호출하십시오.
Control Image Quality and Cropped Areas
HTML 내보내기는 슬라이드 이미지를 압축하여 출력 크기를 줄일 수 있습니다. 더 높은 이미지 품질이 필요할 때는 PicturesCompression에서 값을 선택하여 HtmlOptions.setPicturesCompression에 전달하십시오.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import HtmlOptions, PicturesCompression, Presentation, SaveFormat
presentation = Presentation("presentation.pptx")
try:
html_options = HtmlOptions()
html_options.setPicturesCompression(PicturesCompression.Dpi150)
presentation.save("presentation-dpi-150.html", SaveFormat.Html, html_options)
finally:
presentation.dispose()
기본적으로 이미지의 잘라낸 영역은 내보낸 결과에서 제거될 수 있습니다. 사용자가 숨겨진 이미지 부분을 복구하거나 검토해야 하는 경우에만 잘라낸 데이터를 유지하십시오. 유지하면 HTML 크기가 증가할 수 있습니다.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import HtmlOptions, Presentation, SaveFormat
presentation = Presentation("presentation.pptx")
try:
html_options = HtmlOptions()
html_options.setDeletePicturesCroppedAreas(False)
presentation.save("presentation-with-cropped-areas.html", SaveFormat.Html, html_options)
finally:
presentation.dispose()
Add CSS
간단한 스타일링을 위해서는 HtmlFormatter.createDocumentFormatter에 CSS 문자열을 전달하십시오. 이렇게 하면 Aspose.Slides가 슬라이드 내용을 계속 렌더링하는 동안 주변 HTML 문서를 변경할 수 있습니다.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import HtmlFormatter, HtmlOptions, Presentation, SaveFormat
presentation = Presentation("presentation.pptx")
try:
css_rules = "body { margin: 0; background: #f7f7f7; } .slide { margin: 24px auto; }"
formatter = HtmlFormatter.createDocumentFormatter(css_rules, True)
html_options = HtmlOptions()
html_options.setHtmlFormatter(formatter)
presentation.save("presentation-styled.html", SaveFormat.Html, html_options)
finally:
presentation.dispose()
맞춤형 문서 헤더, 연결된 CSS 파일, 또는 슬라이드와 도형 주위에 맞춤 마크업을 적용하려면 JPype 인터페이스 프록시를 통해 사용자 정의 포맷팅 컨트롤러를 구현하고 이를 HtmlFormatter에 HtmlFormatter.createCustomFormatter와 함께 전달하십시오.
Embed Fonts
대상 환경에 프레젠테이션에 사용된 글꼴이 설치되지 않을 수 있는 경우 EmbedAllFontsHtmlController를 사용하여 HTML에 글꼴을 임베드하십시오. 임베드는 시각적 충실도를 높이지만 출력 크기를 늘립니다.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import EmbedAllFontsHtmlController, HtmlFormatter, HtmlOptions, Presentation, SaveFormat
presentation = Presentation("presentation.pptx")
try:
font_names_to_exclude = jpype.JArray(jpype.JString)(["Arial"])
font_controller = EmbedAllFontsHtmlController(font_names_to_exclude)
formatter = HtmlFormatter.createCustomFormatter(font_controller)
html_options = HtmlOptions()
html_options.setHtmlFormatter(formatter)
presentation.save("presentation-embedded-fonts.html", SaveFormat.Html, html_options)
finally:
presentation.dispose()
대상 브라우저나 시스템에 이미 글꼴이 제공된다고 확신할 때만 글꼴을 제외하십시오. 브랜드 글꼴이나 덜 흔한 글꼴의 경우 임베드하는 것이 일반적으로 더 안전합니다.
Save Resources Externally
자체 포함 HTML은 이동이 쉽지만 Base64로 임베드된 리소스 때문에 파일이 크게 될 수 있습니다. 애플리케이션에서 외부 이미지 파일이 필요하면 JPype 인터페이스 프록시를 통해 리소스 연결 컨트롤러를 구현하고 이를 HtmlOptions 생성자에 전달하십시오.
리소스를 외부화할 때는 두 경로를 명확히 선택하십시오:
- 파일 시스템 출력 경로: 애플리케이션이 생성된 이미지, 글꼴, 오디오 또는 비디오를 기록하는 위치.
- URL 경로: 브라우저가 HTML 문서에서 해당 파일을 로드할 때 사용하는 경로.
Export Media Files
VideoPlayerHtmlController는 비디오 및 오디오 파일을 내보내고 브라우저에서 재생할 수 있는 HTML을 작성합니다. 생성자는 다음 매개변수를 받습니다:
path: 생성된 미디어 파일이 기록될 디렉터리.fileName: 생성 중인 HTML 파일 이름.baseUri: HTML 내 미디어 파일 링크에 사용되는 절대 URI 접두사.
다음 예제는 presentation.pptx에 이미 포함된 미디어를 내보냅니다. 생성된 HTML은 파일 이름만으로 미디어 파일을 참조하며, 이는 HTML 문서에 상대적인 경로이므로 path는 HTML 파일이 함께 저장되는 디렉터리여야 합니다. baseUri는 절대 URI여야 합니다. 로컬 미리보기용으로는 출력 디렉터리에서 file:/// URI를 만들고, 배포용으로는 공개 디렉터리의 절대 URL을 사용하십시오.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import HtmlFormatter, HtmlOptions, Presentation, SVGOptions, SaveFormat, SlideImageFormat, VideoPlayerHtmlController
from pathlib import Path
output_directory = Path("html-output").resolve()
output_directory.mkdir(parents=True, exist_ok=True)
html_file_name = "presentation.html"
media_base_uri = output_directory.as_uri() + "/"
presentation = Presentation("presentation.pptx")
try:
controller = VideoPlayerHtmlController(str(output_directory), html_file_name, media_base_uri)
formatter = HtmlFormatter.createCustomFormatter(controller)
svg_options = SVGOptions(controller)
slide_image_format = SlideImageFormat.svg(svg_options)
html_options = HtmlOptions(controller)
html_options.setHtmlFormatter(formatter)
html_options.setSlideImageFormat(slide_image_format)
html_file_path = output_directory / html_file_name
presentation.save(str(html_file_path), SaveFormat.Html, html_options)
finally:
presentation.dispose()
서버 애플리케이션에서는 특히 변환 작업마다 고유한 출력 디렉터리를 사용하십시오. 공유 출력 경로를 사용하면 서로 다른 변환 작업의 파일이 서로 덮어쓰기될 수 있습니다.
Performance and Resource Management
HTML 변환은 렌더링 작업이므로 처리 시간과 메모리 사용량은 슬라이드 수, 이미지 해상도, 글꼴, 효과, 차트 및 임베드된 미디어에 따라 달라집니다. HtmlOptions.setPicturesCompression에 전달하는 높은 DPI 값, 임베드된 글꼴, SVG 출력 및 유지된 잘라낸 이미지 영역은 충실도를 높이지만 일반적으로 출력 크기를 증가시킵니다.
배치 변환 시:
- 모든 Presentation 인스턴스를 즉시 해제하십시오.
- 작업마다 별도의 출력 디렉터리를 사용하십시오.
- 충실도가 필요하지 않은 경우 일반 글꼴의 임베드를 피하십시오.
- HTML이 미리보기 또는 썸네일 용이라면 이미지 DPI를 낮추십시오.
- 배포 경로가 최종 결정될 때까지 원본 프레젠테이션, 생성된 HTML 및 외부 리소스를 함께 보관하십시오.
FAQ
하이퍼링크가 HTML 출력에서도 유지되나요?
네. 프레젠테이션의 하이퍼링크가 HTML로 내보내지며 대상 URL이 유효하면 클릭할 수 있습니다.
프레젠테이션을 병렬로 HTML로 변환할 수 있나요?
네, 하지만 하나의 Presentation 인스턴스를 스레드 간에 공유하지 마십시오. 파일마다 별개의 프레젠테이션 인스턴스, 별개의 스트림 및 별개의 출력 디렉터리를 사용하여 처리하십시오. 자세한 내용은 multithreading guidance를 참조하십시오.
프레젠테이션 객체가 스레드 안전한가요?
아니요. 단일 Presentation 인스턴스는 하나의 스레드에서 로드, 수정, 저장 및 해제되어야 합니다. 병렬 작업을 수행하려면 스레드당 독립적인 인스턴스를 생성하거나 별도의 프로세스를 사용하십시오.
생성된 HTML 파일이 왜 큰가요?
기본 내보내기는 리소스를 HTML에 직접 임베드할 수 있습니다. 임베드된 글꼴, 고 DPI 이미지, 미디어, SVG 콘텐츠 및 유지된 잘라낸 이미지 영역이 크기를 늘립니다. 외부 리소스를 사용하고, 일반 글꼴을 임베드에서 제외하고, 더 작은 출력이 최대 충실도보다 중요한 경우 HtmlOptions.setPicturesCompression에 낮은 DPI 값을 전달하십시오.
HTML에서 font-size 값이 PowerPoint 값과 다른 이유는?
내보낸 페이지는 SVG 좌표계와 스케일 변환을 사용할 수 있습니다. 순수 CSS 또는 SVG font-size 값만으로는 최종 표시 크기를 설명하지 못합니다. 의도한 줌 레벨에서 렌더링된 슬라이드를 비교하고, 텍스트가 다르게 보일 경우 글꼴 가용성을 확인하십시오.
미디어 내보내기를 위한 baseUri는 어떻게 선택해야 하나요?
브라우저 관점에서 baseUri를 선택하고 절대 URI로 전달하십시오. 로컬 미리보기의 경우 output_directory.as_uri() + "/"와 같이 출력 디렉터리에서 파생시킬 수 있습니다. 배포 시에는 공개 디렉터리의 절대 URL을 사용하십시오. 파일 시스템 path와 브라우저 baseUri가 동일한 문자열일 필요는 없지만 동일한 위치를 가리켜야 하며, 그 위치는 생성된 HTML 파일이 들어 있는 디렉터리여야 합니다. 미디어 링크가 해당 파일을 기준으로 상대 경로로 작성되기 때문입니다.
숨겨진 슬라이드를 포함할 수 있나요?
네. 숨겨진 슬라이드를 내보내야 할 경우 True와 함께 HtmlOptions.setShowHiddenSlides를 호출하십시오.