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.

pdf-to-powerpoint

  1. Buat objek Presentation baru.
  2. Panggil addFromPdf dengan jalur ke file PDF.
  3. 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.

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:

  1. Buat objek Presentation baru.
  2. Buka file HTML untuk dibaca dan berikan stream ke addFromHtml.
  3. 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()

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.