Presentaties importeren vanuit PDF of HTML in Python via Java

Introductie

Aspose.Slides voor Python via Java kan PDF-pagina’s of HTML-inhoud omzetten naar PowerPoint-dia’s zonder Microsoft PowerPoint. De SlideCollection klasse biedt addFromPdf en addFromHtml om geïmporteerde inhoud aan een presentatie toe te voegen.

Voor meer controle over de plaatsing van HTML kan SlideCollection.insertFromHtml gegenereerde dia’s invoegen op een verzamelingsindex of beginnen met het vullen van beschikbare ruimte op een bestaande dia. Lange HTML wordt automatisch over meerdere dia’s gepagineerd, de bron kan als tekenreeks of stream worden aangeleverd, en externe middelen kunnen worden geladen via ExternalResourceResolver met een basis-URI. De geretourneerde Slide array identificeert de getroffen en nieuw aangemaakte dia’s.

Importeren vanuit PDF

Om een PDF-document om te zetten naar een PowerPoint-presentatie, importeer je de inhoud in de dia‑collectie en sla je het resultaat op als een PPTX‑bestand.

pdf-to-powerpoint

  1. Maak een nieuw Presentation object aan.
  2. Roep addFromPdf aan met het pad naar het PDF‑bestand.
  3. Roep save aan met SaveFormat.Pptx om de presentatie naar een PPTX‑bestand te schrijven.

Het volgende Python‑voorbeeld importeert een PDF‑document en slaat de gegenereerde dia’s op als een PowerPoint‑presentatie:

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()

De standaard lege dia blijft in de presentatie omdat de import dia’s toevoegt. Om alleen de geïmporteerde pagina’s te behouden, maak je de dia‑collectie leeg met SlideCollection.clear vóór het importeren.

De addFromPdf methode retourneert de dia’s die hij toevoegt, wat handig is wanneer je alleen de geïmporteerde dia’s moet verwerken.

Importeren vanuit HTML

Aspose.Slides kan ook dia’s maken vanuit een HTML‑document. De bron kan worden aangeleverd als HTML‑tekst of een stream. De volgende stappen gebruiken een bestands‑stream:

  1. Maak een nieuw Presentation object aan.
  2. Open het HTML‑bestand voor lezen en geef de stream door aan addFromHtml.
  3. Roep save aan met SaveFormat.Pptx om het resultaat naar een PPTX‑bestand te schrijven.

Het volgende Python‑voorbeeld importeert een HTML‑document en slaat de gegenereerde dia’s op als een PowerPoint‑presentatie:

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‑inhoud invoegen

Gebruik SlideCollection.insertFromHtml wanneer HTML‑gegenereerde dia’s op een specifieke positie moeten worden geplaatst in plaats van toegevoegd. De index is nul‑gebaseerd en geeft de positie aan waarop de import begint.

Het argument useSlideWithIndexAsStart bepaalt hoe de importeur die positie gebruikt:

  • Wanneer het False is, maakt de importeur nieuwe dia’s op de opgegeven index en verschuift de daarop volgende dia’s.
  • Wanneer het True is, begint de importeur de inhoud te plaatsen in de beschikbare ruimte op de bestaande dia op die index. Als de HTML niet past, pagina’t Aspose.Slides het automatisch en voegt extra dia’s direct na de startdia in.

SlideCollection.insertFromHtml retourneert een array van Slide objecten. Wanneer de invoeging start op nieuwe dia’s, is elk geretourneerd item nieuw aangemaakt. Wanneer een bestaande dia wordt gebruikt als start, bevat de array die getroffen dia gevolgd door eventuele nieuwe overlappende dia’s. Je kunt deze array inspecteren in plaats van het berekenen van het getroffen bereik op basis van het aantal dia’s in de presentatie.

HTML invoegen als nieuwe dia’s

Het volgende voorbeeld levert HTML als een tekenreeks en voegt de gegenereerde dia’s in op verzamelings‑index 1. Het doorgeven van False laat de bestaande dia’s ongewijzigd, behalve dat ze worden verschoven om ruimte te maken.

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()

Beginnen op een bestaande dia

Het volgende voorbeeld levert de HTML via een stream. Het behoudt een koptekst‑vorm op de bestaande sjabloondia, begint met importeren onder het bezette gebied, en laat de lange body doorgaan op nieuwe dia’s.

De HTML bevat ook een relatieve afbeelding‑URL. Een ExternalResourceResolver haalt de bron op, terwijl de basis‑URI de importeur vertelt hoe images/logo.png moet worden opgelost. In dit voorbeeld wordt verwacht dat dat bestand zich bevindt op 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

Kan Aspose.Slides tabellen detecteren bij het importeren van een PDF?

Ja. Maak een PdfImportOptions object aan, roep setDetectTables aan met True, en geef de opties door aan addFromPdf. De kwaliteit van tabelherkenning hangt af van de structuur en complexiteit van de bron‑PDF.