Nhập bản trình bày từ PDF hoặc HTML trong Python qua Java
Giới thiệu
Aspose.Slides cho Python qua Java có thể chuyển các trang PDF hoặc nội dung HTML thành các slide PowerPoint mà không cần Microsoft PowerPoint. Lớp SlideCollection cung cấp các phương thức addFromPdf và addFromHtml để thêm nội dung đã nhập vào một bản trình bày.
Để kiểm soát tốt hơn vị trí HTML, SlideCollection.insertFromHtml có thể chèn các slide được tạo ra tại một chỉ mục của bộ sưu tập hoặc bắt đầu lấp đầy không gian có sẵn trên một slide hiện có. HTML dài sẽ được phân trang tự động sang các slide bổ sung, nguồn có thể được cung cấp dưới dạng chuỗi hoặc luồng, và các tài nguyên bên ngoài có thể được tải thông qua ExternalResourceResolver với một URI cơ sở. Mảng Slide trả về xác định các slide bị ảnh hưởng và các slide mới được tạo.
Nhập từ PDF
Để chuyển đổi tài liệu PDF sang bản trình bày PowerPoint, nhập nội dung của nó vào bộ sưu tập slide và lưu kết quả dưới dạng tệp PPTX.

- Tạo một đối tượng Presentation mới.
- Gọi addFromPdf với đường dẫn tới tệp PDF.
- Gọi save với SaveFormat.Pptx để ghi bản trình bày ra tệp PPTX.
Ví dụ Python sau nhập một tài liệu PDF và lưu các slide được tạo thành một bản trình bày 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()
Slide trắng mặc định vẫn còn trong bản trình bày vì việc nhập thêm các slide vào cuối. Để chỉ giữ các trang đã nhập, hãy xóa bộ sưu tập slide bằng SlideCollection.clear trước khi nhập.
Phương thức addFromPdf trả về các slide mà nó thêm vào, điều này hữu ích khi bạn chỉ cần xử lý các slide đã nhập.
Tip
Hãy thử ứng dụng web miễn phí PDF to PowerPoint để thấy quy trình chuyển đổi này hoạt động.Nhập từ HTML
Aspose.Slides cũng có thể tạo các slide từ một tài liệu HTML. Nguồn có thể được cung cấp dưới dạng văn bản HTML hoặc một luồng. Các bước sau sử dụng một luồng tệp:
- Tạo một đối tượng Presentation mới.
- Mở tệp HTML để đọc và truyền luồng vào addFromHtml.
- Gọi save với SaveFormat.Pptx để ghi kết quả ra tệp PPTX.
Ví dụ Python sau nhập một tài liệu HTML và lưu các slide được tạo thành một bản trình bày 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()
Chèn nội dung HTML
Sử dụng SlideCollection.insertFromHtml khi các slide được tạo từ HTML phải được đặt ở vị trí cụ thể thay vì được thêm vào cuối. Chỉ mục bắt đầu từ 0 và xác định vị trí bắt đầu nhập.
Đối số useSlideWithIndexAsStart điều khiển cách trình nhập sử dụng vị trí đó:
- Khi nó là
False, trình nhập tạo các slide mới tại chỉ mục đã chỉ định và đẩy các slide sau chúng sang phía sau. - Khi nó là
True, trình nhập bắt đầu đặt nội dung vào không gian có sẵn trên slide hiện có tại chỉ mục đó. Nếu HTML không vừa, Aspose.Slides sẽ tự động phân trang và chèn các slide bổ sung ngay sau slide bắt đầu.
SlideCollection.insertFromHtml trả về một mảng các đối tượng Slide. Khi việc chèn bắt đầu trên các slide mới, mỗi mục trả về đều là slide mới được tạo. Khi một slide hiện có được dùng làm điểm bắt đầu, mảng sẽ bao gồm slide bị ảnh hưởng đó theo sau là bất kỳ slide tràn mới nào. Bạn có thể kiểm tra mảng này thay vì tính toán phạm vi bị ảnh hưởng dựa trên số lượng slide của bản trình bày.
Chèn HTML như các slide mới
Ví dụ sau cung cấp HTML dưới dạng chuỗi và chèn các slide được tạo tại chỉ mục bộ sưu tập 1. Truyền False sẽ giữ các slide hiện có không thay đổi ngoại trừ việc đẩy chúng sang để tạo chỗ.
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()
Bắt đầu trên một Slide hiện có
Ví dụ tiếp theo cung cấp HTML qua một luồng. Nó giữ lại một hình dạng tiêu đề trên slide mẫu hiện có, bắt đầu nhập dưới khu vực đã chiếm, và cho phép phần nội dung dài tiếp tục trên các slide mới.
HTML cũng chứa một URL hình ảnh tương đối. Một ExternalResourceResolver sẽ lấy tài nguyên, trong khi URI cơ sở cho trình nhập biết cách giải quyết images/logo.png. Trong ví dụ này, tệp đó dự kiến nằm ở 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()
Warning
Một trình giải quyết tài nguyên bên ngoài không giới hạn có thể đọc các tài nguyên cục bộ hoặc mạng được HTML tham chiếu. Đối với đầu vào không tin cậy, hãy xác thực và làm sạch các URL tài nguyên dựa trên danh sách cho phép các scheme, thư mục và máy chủ được phép trước khi nhập HTML.Câu hỏi thường gặp
Aspose.Slides có thể phát hiện bảng khi nhập PDF không?
Có. Tạo một đối tượng PdfImportOptions, gọi setDetectTables với True, và truyền các tùy chọn này vào addFromPdf. Chất lượng nhận dạng bảng phụ thuộc vào cấu trúc và độ phức tạp của PDF nguồn.