Python via Java에서 PDF 또는 HTML로 프레젠테이션 가져오기

소개

Aspose.Slides for Python via Java는 Microsoft PowerPoint 없이 PDF 페이지나 HTML 콘텐츠를 PowerPoint 슬라이드로 변환할 수 있습니다. SlideCollection 클래스는 가져온 콘텐츠를 프레젠테이션에 추가하기 위해 addFromPdfaddFromHtml를 제공합니다.

HTML 배치를 보다 세밀하게 제어하려면, SlideCollection.insertFromHtml를 사용해 지정된 컬렉션 인덱스에 슬라이드를 삽입하거나 기존 슬라이드의 사용 가능한 공간에 채울 수 있습니다. 길이가 긴 HTML은 자동으로 추가 슬라이드에 페이지가 나뉘며, 소스는 문자열이나 스트림으로 제공될 수 있고, 외부 리소스는 기본 URI와 함께 ExternalResourceResolver를 통해 로드될 수 있습니다. 반환된 Slide 배열은 영향을 받은 슬라이드와 새로 생성된 슬라이드를 식별합니다.

PDF에서 가져오기

PDF 문서를 PowerPoint 프레젠테이션으로 변환하려면, 슬라이드 컬렉션에 내용을 가져온 뒤 결과를 PPTX 파일로 저장합니다.

pdf-to-powerpoint

  1. Presentation 객체를 생성합니다.
  2. PDF 파일 경로와 함께 addFromPdf를 호출합니다.
  3. SaveFormat.Pptx를 사용해 save를 호출하여 프레젠테이션을 PPTX 파일로 기록합니다.

다음 Python 예제는 PDF 문서를 가져와 생성된 슬라이드를 PowerPoint 프레젠테이션으로 저장합니다:

import jpype
import asposeslides

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

from asposeslides.api import Presentation, SaveFormat

presentation = Presentation()
try:
    presentation.getSlides().addFromPdf("document.pdf")
    presentation.save("presentation.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

기본 빈 슬라이드가 프레젠테이션에 남아 있는 이유는 가져오기가 슬라이드를 추가하기 때문입니다. 가져온 페이지만 남기려면 가져오기 전에 SlideCollection.clear로 슬라이드 컬렉션을 비워야 합니다.

addFromPdf 메서드는 추가된 슬라이드를 반환하므로, 가져온 슬라이드만 별도로 처리할 때 유용합니다.

HTML에서 가져오기

Aspose.Slides는 HTML 문서에서도 슬라이드를 생성할 수 있습니다. 소스는 HTML 텍스트 또는 스트림으로 제공될 수 있습니다. 다음 단계에서는 파일 스트림을 사용합니다.

  1. Presentation 객체를 생성합니다.
  2. HTML 파일을 읽기 전용으로 열고 스트림을 addFromHtml에 전달합니다.
  3. SaveFormat.Pptx를 사용해 save를 호출하여 결과를 PPTX 파일로 기록합니다.

다음 Python 예제는 HTML 문서를 가져와 생성된 슬라이드를 PowerPoint 프레젠테이션으로 저장합니다:

import jpype
import asposeslides

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

from asposeslides.api import Presentation, SaveFormat
from java.io import FileInputStream

presentation = Presentation()
try:
    html_stream = FileInputStream("page.html")
    try:
        presentation.getSlides().addFromHtml(html_stream)
    finally:
        html_stream.close()
    presentation.save("presentation.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

HTML 콘텐츠 삽입

HTML로 생성된 슬라이드를 추가 대신 특정 위치에 배치해야 할 경우 SlideCollection.insertFromHtml를 사용합니다. 인덱스는 0부터 시작하며, 가져오기가 시작되는 위치를 지정합니다.

useSlideWithIndexAsStart 인자는 가져오기 동작을 다음과 같이 제어합니다:

  • False이면, 지정된 인덱스에 새 슬라이드를 만들고 이후 슬라이드를 오른쪽으로 이동시킵니다.
  • True이면, 해당 인덱스에 있는 기존 슬라이드의 사용 가능한 공간에 콘텐츠를 배치합니다. HTML이 공간에 맞지 않으면 Aspose.Slides가 자동으로 페이지를 나누고 시작 슬라이드 바로 뒤에 추가 슬라이드를 삽입합니다.

SlideCollection.insertFromHtmlSlide 객체 배열을 반환합니다. 삽입이 새 슬라이드에서 시작되면 반환된 모든 항목이 새로 생성된 슬라이드이며, 기존 슬라이드가 시작점으로 사용될 경우 해당 슬라이드와 이후에 추가된 오버플로 슬라이드가 포함됩니다. 프레젠테이션 슬라이드 수를 계산하는 대신 이 배열을 검사하여 영향을 받은 범위를 확인할 수 있습니다.

새 슬라이드로 HTML 삽입

다음 예제는 HTML 문자열을 제공하고 컬렉션 인덱스 1에 생성된 슬라이드를 삽입합니다. False를 전달하면 기존 슬라이드는 위치가 이동될 뿐 내용은 변경되지 않습니다.

import jpype
import asposeslides

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

from asposeslides.api import Presentation, SaveFormat

presentation = Presentation()
try:
    layout_slide = presentation.getLayoutSlides().get_Item(0)
    presentation.getSlides().addEmptySlide(layout_slide)
    presentation.getSlides().addEmptySlide(layout_slide)

    insert_index = 1
    html = "<html><body><h1>Quarterly update</h1><p>This content is inserted before the slide that was at index 1.</p></body></html>"
    inserted_slides = presentation.getSlides().insertFromHtml(insert_index, html, False)

    for slide in inserted_slides:
        print("Inserted slide index:", presentation.getSlides().indexOf(slide))

    presentation.save("presentation-with-inserted-html.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

기존 슬라이드에서 시작

다음 예제는 스트림을 통해 HTML을 제공하며, 기존 템플릿 슬라이드에 헤더 도형을 유지하고, 차지된 영역 아래에서 가져오기를 시작해 긴 본문을 새 슬라이드로 이어갑니다.

HTML에는 상대 이미지 URL도 포함되어 있습니다. ExternalResourceResolver가 리소스를 가져오며, base URI는 images/logo.png를 어떻게 해석할지 알려줍니다. 이 예제에서는 해당 파일이 html-assets/images/logo.png에 존재한다고 가정합니다.

from pathlib import Path

import jpype
import asposeslides

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

from asposeslides.api import ExternalResourceResolver, Presentation, SaveFormat, ShapeType
from java.io import ByteArrayInputStream

presentation = Presentation()
try:
    template_slide = presentation.getSlides().get_Item(0)
    header = template_slide.getShapes().addAutoShape(ShapeType.Rectangle, 20, 20, 680, 60)
    header.getTextFrame().setText("Product roadmap")

    html_parts = ["<html><body><img src='images/logo.png' width='120' height='60'><h2>Roadmap details</h2>"]
    for item_index in range(1, 61):
        html_parts.append(f"<p style='font-size:24pt'>Roadmap item {item_index}: detailed implementation notes.</p>")
    html_parts.append("</body></html>")

    html = "".join(html_parts)
    html_data = html.encode("utf-8")
    resolver = ExternalResourceResolver()
    base_directory = Path("html-assets").resolve()
    base_uri = base_directory.as_uri() + "/"

    html_stream = ByteArrayInputStream(html_data)
    try:
        affected_slides = presentation.getSlides().insertFromHtml(0, html_stream, resolver, base_uri, True)
        for slide in affected_slides:
            print("Affected slide index:", presentation.getSlides().indexOf(slide))
    finally:
        html_stream.close()

    presentation.save("presentation-with-html-overflow.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

FAQ

Aspose.Slides가 PDF를 가져올 때 표를 감지할 수 있나요?

네. PdfImportOptions 객체를 생성하고, True와 함께 setDetectTables를 호출한 뒤, 옵션을 addFromPdf에 전달합니다. 표 인식 품질은 원본 PDF의 구조와 복잡도에 따라 달라집니다.