นำเข้าการนำเสนอจาก PDF หรือ HTML ใน Python ผ่าน Java

บทนำ

Aspose.Slides for Python via Java สามารถแปลงหน้า PDF หรือเนื้อหา HTML ให้เป็นสไลด์ PowerPoint ได้โดยไม่ต้องใช้ Microsoft PowerPoint. คลาส SlideCollection มีเมธอด addFromPdf และ addFromHtml เพื่อเพิ่มเนื้อหาที่นำเข้าไปยังงานนำเสนอ

หากต้องการควบคุมการวางตำแหน่ง HTML มากขึ้น, SlideCollection.insertFromHtml สามารถแทรกสไลด์ที่สร้างขึ้นตามตำแหน่งในคอลเลกชันหรือเริ่มเติมพื้นที่ว่างบนสไลด์ที่มีอยู่ได้. HTML ยาวจะถูกแบ่งหน้าเป็นสไลด์เพิ่มเติมโดยอัตโนมัติ, แหล่งข้อมูลสามารถส่งเป็นสตริงหรือสตรีมได้, และแอสเซ็ตภายนอกสามารถโหลดผ่าน ExternalResourceResolver โดยกำหนด base URI. อาร์เรย์ Slide ที่คืนค่าจะบ่งบอกสไลด์ที่ได้รับผลกระทบและสไลด์ใหม่ที่สร้างขึ้น

การนำเข้าจาก PDF

เพื่อแปลงเอกสาร PDF ให้เป็นงานนำเสนอ PowerPoint, ให้นำเข้เนื้อหาเข้าไปในคอลเลกชันสไลด์และบันทึกผลลัพธ์เป็นไฟล์ PPTX

pdf-to-powerpoint

  1. สร้างอ็อบเจ็กต์ Presentation ใหม่
  2. เรียกเมธอด addFromPdf พร้อมเส้นทางไฟล์ PDF
  3. เรียกเมธอด save พร้อม SaveFormat.Pptx เพื่อบันทึกงานนำเสนอเป็นไฟล์ 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. เรียกเมธอด save พร้อม SaveFormat.Pptx เพื่อบันทึกผลลัพธ์เป็นไฟล์ 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

ใช้ SlideCollection.insertFromHtml เมื่อสไลด์ที่สร้างจาก HTML ต้องวางในตำแหน่งเฉพาะแทนการเพิ่มต่อท้าย. ดัชนีเริ่มจากศูนย์และระบุตำแหน่งที่การนำเข้าจะเริ่มต้น

พารามิเตอร์ useSlideWithIndexAsStart ควบคุมวิธีที่ตัวนำเข้าใช้ตำแหน่งนั้น:

  • หากเป็น False ตัวนำเข้าจะสร้างสไลด์ใหม่ที่ตำแหน่งที่ระบุและเลื่อนสไลด์ที่ตามมาท้าย
  • หากเป็น True ตัวนำเข้าจะเริ่มวางเนื้อหาในพื้นที่ว่างของสไลด์ที่มีอยู่ที่ตำแหน่งนั้น. หาก HTML ไม่พอดี, Aspose.Slides จะแบ่งหน้าอัตโนมัติและแทรกสไลด์เพิ่มทันทีหลังสไลด์เริ่มต้น

เมธอด SlideCollection.insertFromHtml จะคืนอาร์เรย์ของอ็อบเจ็กต์ Slide เมื่อการแทรกเริ่มที่สไลด์ใหม่, รายการที่คืนค่าทั้งหมดจะเป็นสไลด์ที่สร้างใหม่. หากใช้สไลด์ที่มีอยู่เป็นจุดเริ่มต้น, อาร์เรย์จะรวมสไลด์ที่ได้รับผลกระทบและสไลด์ที่เพิ่มจากการล้น. คุณสามารถตรวจสอบอาร์เรย์นี้แทนการคำนวณช่วงที่ได้รับผลกระทบจากจำนวนสไลด์ของงานนำเสนอ

แทรก 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 ผ่านสตรีม. มันรักษา Shape ส่วนหัวบนสไลด์เทมเพลตที่มีอยู่, เริ่มนำเข้าตำแหน่งด้านล่างพื้นที่ที่ถูกใช้, และให้เนื้อหายาวต่อเนื่องไปยังสไลด์ใหม่

HTML ยังมี URL ของรูปภาพแบบ relative. 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()

คำถามที่พบบ่อย

Aspose.Slides สามารถตรวจจับตารางเมื่อทำการนำเข้าจาก PDF ได้หรือไม่?

ได้. สร้างอ็อบเจ็กต์ PdfImportOptions, เรียกเมธอด setDetectTables ด้วยค่า True, แล้วส่งตัวเลือกไปยังเมธอด addFromPdf. คุณภาพของการจดจำตารางขึ้นอยู่กับโครงสร้างและความซับซ้อนของ PDF ต้นฉบับ