Importera presentationer från PDF eller HTML i Python via Java
Introduktion
Aspose.Slides för Python via Java kan omvandla PDF‑sidor eller HTML‑innehåll till PowerPoint‑bilder utan Microsoft PowerPoint. Klassen SlideCollection tillhandahåller addFromPdf och addFromHtml för att lägga till importerat innehåll i en presentation.
För mer kontroll över placeringen av HTML kan SlideCollection.insertFromHtml infoga genererade bilder vid ett samlingsindex eller börja fylla tillgängligt utrymme på en befintlig bild. Lång HTML pagineras automatiskt över ytterligare bilder, källan kan levereras som en sträng eller ström, och externa resurser kan laddas via ExternalResourceResolver med en bas‑URI. Den returnerade Slide‑arrayen identifierar de påverkade och nyss skapade bilderna.
Importera från PDF
För att konvertera ett PDF‑dokument till en PowerPoint‑presentation, importera dess innehåll till bildsamlingen och spara resultatet som en PPTX‑fil.

- Skapa ett nytt Presentation‑objekt.
- Anropa addFromPdf med sökvägen till PDF‑filen.
- Anropa save med SaveFormat.Pptx för att skriva presentationen till en PPTX‑fil.
Följande Python‑exempel importerar ett PDF‑dokument och sparar de genererade bilderna som en PowerPoint‑presentation:
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()
Den standardtomma bilden kvarstår i presentationen eftersom importen lägger till bilder. För att behålla endast importerade sidor, rensa bildsamlingen med SlideCollection.clear före import.
Metoden addFromPdf returnerar de bilder den lägger till, vilket är användbart när du bara behöver bearbeta de importerade bilderna.
Tip
Prova det gratis PDF to PowerPoint‑webbappen för att se detta konverteringsflöde i praktiken.Importera från HTML
Aspose.Slides kan också skapa bilder från ett HTML‑dokument. Källan kan levereras som HTML‑text eller en ström. Följande steg använder en filström:
- Skapa ett nytt Presentation‑objekt.
- Öppna HTML‑filen för läsning och skicka strömmen till addFromHtml.
- Anropa save med SaveFormat.Pptx för att skriva resultatet till en PPTX‑fil.
Följande Python‑exempel importerar ett HTML‑dokument och sparar de genererade bilderna som en PowerPoint‑presentation:
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()
Infoga HTML‑innehåll
Använd SlideCollection.insertFromHtml när HTML‑genererade bilder måste placeras på en specifik position istället för att läggas till. Indexet är nollbaserat och identifierar den position där importen startar.
Argumentet useSlideWithIndexAsStart styr hur importören använder den positionen:
- När den är
Falseskapar importören nya bilder vid det angivna indexet och förskjuter de följande bilderna. - När den är
Truebörjar importören placera innehåll i tillgängligt utrymme på den befintliga bilden vid det indexet. Om HTML‑innehållet inte får plats paginerar Aspose.Slides det automatiskt och infogar ytterligare bilder omedelbart efter startbilden.
SlideCollection.insertFromHtml returnerar en array av Slide‑objekt. När infogning startar på nya bilder är varje returnerat objekt nyss skapat. När en befintlig bild används som start inkluderar arrayen den påverkade bilden följt av eventuella nya överskjutande bilder. Du kan undersöka denna array istället för att beräkna det påverkade intervallet från presentationens bildantal.
Infoga HTML som nya bilder
Följande exempel levererar HTML som en sträng och infogar de genererade bilderna vid samlingsindex 1. Att skicka False lämnar de befintliga bilderna oförändrade förutom att de förskjuts för att skapa utrymme.
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()
Starta på en befintlig bild
Nästa exempel levererar HTML via en ström. Det behåller en rubrikform på den befintliga mallbilden, påbörjar importen under det upptagna området och låter den långa kroppen fortsätta på nya bilder.
HTML‑innehållet innehåller också en relativ bild‑URL. En ExternalResourceResolver hämtar resursen, medan bas‑URI:n talar om för importören hur images/logo.png ska lösas. I detta exempel förväntas filen finnas på 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()
Warning
En obegränsad extern resurs‑resolver kan läsa lokala eller nätverksresurser som refereras i HTML‑koden. För opålitlig indata, validera och sanera resurs‑URL:er mot en tillåtelselista med godkända scheman, kataloger och värdar innan HTML importeras.FAQ
Kan Aspose.Slides upptäcka tabeller vid import av en PDF?
Ja. Skapa ett PdfImportOptions‑objekt, anropa setDetectTables med True och skicka alternativen till addFromPdf. Kvaliteten på tabelligenkänning beror på strukturen och komplexiteten i käll‑PDF‑filen.