Importazione di presentazioni da PDF o HTML in Python tramite Java
Introduzione
Aspose.Slides per Python tramite Java può trasformare pagine PDF o contenuti HTML in diapositive PowerPoint senza Microsoft PowerPoint. La classe SlideCollection fornisce addFromPdf e addFromHtml per aggiungere contenuti importati a una presentazione.
Per un controllo maggiore sul posizionamento dell’HTML, SlideCollection.insertFromHtml può inserire le diapositive generate in un indice della collezione o iniziare a riempire lo spazio disponibile su una diapositiva esistente. L’HTML lungo viene paginato automaticamente su diapositive aggiuntive, la sorgente può essere fornita come stringa o stream e le risorse esterne possono essere caricate tramite ExternalResourceResolver con un URI di base. L’array di Slide restituito identifica le diapositive interessate e quelle appena create.
Importazione da PDF
Per convertire un documento PDF in una presentazione PowerPoint, importa il suo contenuto nella collezione di diapositive e salva il risultato come file PPTX.

- Crea un nuovo oggetto Presentation.
- Chiama addFromPdf con il percorso del file PDF.
- Chiama save con SaveFormat.Pptx per scrivere la presentazione in un file PPTX.
Il seguente esempio Python importa un documento PDF e salva le diapositive generate come presentazione 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()
La diapositiva vuota predefinita rimane nella presentazione perché l’importazione aggiunge diapositive. Per conservare solo le pagine importate, svuota la collezione di diapositive con SlideCollection.clear prima di importare.
Il metodo addFromPdf restituisce le diapositive che aggiunge, utile quando è necessario elaborare solo le diapositive importate.
Tip
Prova l’app web gratuita PDF to PowerPoint per vedere questo flusso di conversione in azione.Importazione da HTML
Aspose.Slides può anche creare diapositive da un documento HTML. La sorgente può essere fornita come testo HTML o come stream. I passaggi seguenti usano uno stream di file:
- Crea un nuovo oggetto Presentation.
- Apri il file HTML in lettura e passa lo stream a addFromHtml.
- Chiama save con SaveFormat.Pptx per scrivere il risultato in un file PPTX.
Il seguente esempio Python importa un documento HTML e salva le diapositive generate come presentazione 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()
Inserimento contenuto HTML
Utilizza SlideCollection.insertFromHtml quando le diapositive generate da HTML devono essere posizionate in un punto specifico anziché aggiunte in coda. L’indice è basato su zero e identifica la posizione in cui inizia l’importazione.
L’argomento useSlideWithIndexAsStart controlla come l’importatore usa tale posizione:
- Quando è
False, l’importatore crea nuove diapositive all’indice specificato e sposta quelle successive. - Quando è
True, l’importatore inizia a posizionare il contenuto nello spazio disponibile sulla diapositiva esistente in quel indice. Se l’HTML non entra, Aspose.Slides lo pagina automaticamente e inserisce diapositive aggiuntive subito dopo la diapositiva di partenza.
SlideCollection.insertFromHtml restituisce un array di oggetti Slide. Quando l’inserimento inizia su nuove diapositive, ogni elemento restituito è appena creato. Quando una diapositiva esistente è usata come punto di partenza, l’array include quella diapositiva interessata seguita da eventuali nuove diapositive di overflow. Puoi esaminare questo array invece di calcolare l’intervallo interessato dal conteggio delle diapositive della presentazione.
Inserimento HTML come nuove diapositive
Il seguente esempio fornisce l’HTML come stringa e inserisce le diapositive generate all’indice della collezione 1. Passare False lascia inalterate le diapositive esistenti, tranne lo spostamento necessario per fare spazio.
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()
Inizio su una diapositiva esistente
Il prossimo esempio fornisce l’HTML tramite uno stream. Mantiene una forma di intestazione sulla diapositiva modello esistente, avvia l’importazione sotto l’area occupata e consente al corpo lungo di continuare su nuove diapositive.
L’HTML contiene anche un URL immagine relativo. Un ExternalResourceResolver ottiene la risorsa, mentre l’URI di base indica all’importatore come risolvere images/logo.png. In questo esempio, il file è previsto in 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
Un resolver di risorse esterne non limitato può leggere risorse locali o di rete richieste dall’HTML. Per input non attendibile, valida e sanitizza gli URL delle risorse rispetto a una whitelist di schemi, directory e host consentiti prima di importare l’HTML.FAQ
Aspose.Slides può rilevare le tabelle durante l’importazione di un PDF?
Sì. Crea un oggetto PdfImportOptions, chiama setDetectTables con True e passa le opzioni a addFromPdf. La qualità del riconoscimento delle tabelle dipende dalla struttura e dalla complessità del PDF sorgente.