Impor Presentasi dari PDF atau HTML dalam Python via Java
Pendahuluan
Aspose.Slides untuk Python via Java dapat mengubah halaman PDF atau konten HTML menjadi slide PowerPoint tanpa Microsoft PowerPoint. Kelas SlideCollection menyediakan addFromPdf dan addFromHtml untuk menambahkan konten yang diimpor ke presentasi.
Untuk kontrol yang lebih besar atas penempatan HTML, SlideCollection.insertFromHtml dapat menyisipkan slide yang dihasilkan pada indeks koleksi atau mulai mengisi ruang yang tersedia pada slide yang ada. HTML yang panjang dipaginasi secara otomatis ke slide tambahan, sumber dapat diberikan sebagai string atau stream, dan aset eksternal dapat dimuat melalui ExternalResourceResolver dengan URI dasar. Array Slide yang dikembalikan mengidentifikasi slide yang terpengaruh dan yang baru dibuat.
Impor dari PDF
Untuk mengonversi dokumen PDF menjadi presentasi PowerPoint, impor kontennya ke koleksi slide dan simpan hasilnya sebagai file PPTX.

- Buat objek Presentation baru.
- Panggil addFromPdf dengan jalur ke file PDF.
- Panggil save dengan SaveFormat.Pptx untuk menulis presentasi ke file PPTX.
Contoh Python berikut mengimpor dokumen PDF dan menyimpan slide yang dihasilkan sebagai presentasi 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 kosong standar tetap ada dalam presentasi karena proses impor menambahkan slide. Untuk mempertahankan hanya halaman yang diimpor, bersihkan koleksi slide dengan SlideCollection.clear sebelum mengimpor.
Metode addFromPdf mengembalikan slide yang ditambahkan, yang berguna bila Anda hanya perlu memproses slide yang diimpor.
Tip
Coba aplikasi web gratis PDF to PowerPoint untuk melihat alur kerja konversi ini beraksi.Impor dari HTML
Aspose.Slides juga dapat membuat slide dari dokumen HTML. Sumber dapat diberikan sebagai teks HTML atau stream. Langkah-langkah berikut menggunakan stream file:
- Buat objek Presentation baru.
- Buka file HTML untuk dibaca dan berikan stream ke addFromHtml.
- Panggil save dengan SaveFormat.Pptx untuk menulis hasilnya ke file PPTX.
Contoh Python berikut mengimpor dokumen HTML dan menyimpan slide yang dihasilkan sebagai presentasi 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()
Sisipkan Konten HTML
Gunakan SlideCollection.insertFromHtml ketika slide yang dihasilkan dari HTML harus ditempatkan pada posisi tertentu alih‑alih ditambahkan di akhir. Indeks bersifat zero‑based dan mengidentifikasi posisi tempat impor dimulai.
Argumen useSlideWithIndexAsStart mengontrol cara pengimpor menggunakan posisi tersebut:
- Ketika
False, pengimpor membuat slide baru pada indeks yang ditentukan dan menggeser slide yang mengikutinya. - Ketika
True, pengimpor mulai menempatkan konten di ruang yang tersedia pada slide yang ada pada indeks itu. Jika HTML tidak muat, Aspose.Slides memaginasi secara otomatis dan menyisipkan slide tambahan tepat setelah slide awal.
SlideCollection.insertFromHtml mengembalikan array objek Slide. Saat penyisipan dimulai pada slide baru, setiap item yang dikembalikan adalah slide yang baru dibuat. Jika slide yang ada digunakan sebagai titik mulai, array mencakup slide yang terpengaruh tersebut diikuti oleh slide overflow baru apa pun. Anda dapat memeriksa array ini alih‑alih menghitung rentang yang terpengaruh dari jumlah slide presentasi.
Sisipkan HTML sebagai Slide Baru
Contoh berikut memberikan HTML sebagai string dan menyisipkan slide yang dihasilkan pada indeks koleksi 1. Memberikan False membuat slide yang ada tidak berubah kecuali digeser untuk memberi ruang.
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()
Mulai pada Slide yang Ada
Contoh berikut memberi HTML melalui stream. Ia mempertahankan bentuk header pada slide templat yang ada, memulai impor di bawah area yang ditempati, dan membiarkan isi panjang berlanjut ke slide baru.
HTML juga berisi URL gambar relatif. ExternalResourceResolver mengambil sumber daya tersebut, sementara URI dasar memberi tahu pengimpor cara menyelesaikan images/logo.png. Dalam contoh ini, file tersebut diharapkan berada di 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()
Peringatan
Resolver sumber daya eksternal yang tidak dibatasi dapat membaca sumber daya lokal atau jaringan yang dirujuk oleh HTML. Untuk masukan yang tidak dipercaya, validasi dan sanitasi URL sumber daya terhadap daftar yang diizinkan (allowlist) skema, direktori, dan host yang diperbolehkan sebelum mengimpor HTML.FAQ
Apakah Aspose.Slides dapat mendeteksi tabel saat mengimpor PDF?
Ya. Buat objek PdfImportOptions, panggil setDetectTables dengan True, dan berikan opsi tersebut ke addFromPdf. Kualitas pengenalan tabel tergantung pada struktur dan kompleksitas PDF sumber.