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 sebuah presentasi.

Untuk kontrol 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 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 terdampak dan yang baru dibuat.

Impor dari PDF

Untuk mengonversi dokumen PDF menjadi presentasi PowerPoint, impor kontennya ke dalam koleksi slide dan simpan hasilnya sebagai file PPTX.

pdf-to-powerpoint

  1. Buat objek Presentation baru.
  2. Panggil addFromPdf dengan path 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 default tetap ada dalam presentasi karena impor menambahkan slide. Untuk mempertahankan hanya halaman yang diimpor, kosongkan koleksi slide dengan SlideCollection.clear sebelum mengimpor.

Metode addFromPdf mengembalikan slide yang ditambahkannya, yang berguna bila Anda perlu memproses hanya 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 file stream:

  1. Buat objek Presentation baru.
  2. Buka file HTML untuk dibaca dan berikan stream ke addFromHtml.
  3. Panggil save dengan SaveFormat.Pptx untuk menulis hasil 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 bila slide yang dihasilkan dari HTML harus ditempatkan pada posisi tertentu alih-alih ditambahkan. Indeks dimulai dari nol dan mengidentifikasi posisi tempat impor dimulai.

Argumen useSlideWithIndexAsStart mengontrol bagaimana 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 tersebut. Jika HTML tidak muat, Aspose.Slides memaginasi secara otomatis dan menyisipkan slide tambahan segera setelah slide awal.

SlideCollection.insertFromHtml mengembalikan array objek Slide. Ketika penyisipan dimulai pada slide baru, setiap item yang dikembalikan merupakan slide yang baru dibuat. Ketika slide yang ada digunakan sebagai awal, array tersebut mencakup slide yang terdampak diikuti oleh slide overflow baru. Anda dapat memeriksa array ini alih-alih menghitung rentang yang terdampak dari jumlah slide presentasi.

Sisipkan HTML sebagai Slide Baru

Contoh berikut menyediakan HTML sebagai string dan menyisipkan slide yang dihasilkan pada indeks koleksi 1. Menetapkan False membiarkan 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 berikutnya menyediakan 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. Sebuah ExternalResourceResolver memperoleh sumber daya tersebut, sementara URI dasar memberi tahu pengimpor cara menyelesaikan images/logo.png. Pada 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

Can Aspose.Slides detect tables when importing a PDF?

Ya. Buat objek PdfImportOptions , panggil setDetectTables dengan True, dan berikan opsi tersebut ke addFromPdf. Kualitas pengenalan tabel bergantung pada struktur dan kompleksitas PDF sumber.