Importeer presentaties van PDF of HTML in Python via Java

Introductie

Aspose.Slides for 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 toe te voegen aan een presentatie.

Voor meer controle over de plaatsing van HTML kan SlideCollection.insertFromHtml gegenereerde dia’s invoegen op een verzameling‑index of beginnen met het vullen van beschikbare ruimte op een bestaande dia. Lange HTML wordt automatisch over extra dia’s gepagineerd, de bron kan worden opgegeven als een string of stream, en externe assets 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, importeert u de inhoud in de dia‑collectie en slaat u 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, maakt u de dia‑collectie leeg met SlideCollection.clear voordat u importeert.

De addFromPdf methode retourneert de dia’s die ze toevoegt, wat handig is wanneer u 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 opgegeven als HTML‑tekst of een stream. De volgende stappen gebruiken een bestand‑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 start.

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 schuift de daaropvolgende dia’s.
  • Wanneer het True is, begint de importeur de inhoud te plaatsen in de beschikbare ruimte op de bestaande dia op die index. Past de HTML niet, dan pagineert Aspose.Slides het automatisch en voegt extra dia’s toe direct na de start‑dia.

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 als start wordt gebruikt, bevat de array die getroffen dia gevolgd door eventuele nieuwe overflow‑dia’s. U kunt deze array inspecteren in plaats van het getroffen bereik te berekenen op basis van het totale aantal dia’s in de presentatie.

HTML invoegen als nieuwe dia’s

Het volgende voorbeeld levert HTML als een string 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()

Starten op een bestaande dia

Het volgende voorbeeld levert de HTML via een stream. Het behoudt een koptekstvorm op de bestaande sjabloondia, start het importeren onder het bezette gebied en laat de lange tekst doorgaan op nieuwe dia’s.

De HTML bevat ook een relatieve afbeeldings‑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 dat bestand verwacht 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, 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.