Importowanie prezentacji z PDF lub HTML w Pythonie poprzez Java
Wprowadzenie
Aspose.Slides for Python via Java może zamienić strony PDF lub treść HTML na slajdy PowerPoint bez Microsoft PowerPoint. Klasa SlideCollection zapewnia addFromPdf i addFromHtml do dołączania importowanej zawartości do prezentacji.
Aby uzyskać większą kontrolę nad umiejscowieniem HTML, SlideCollection.insertFromHtml może wstawiać wygenerowane slajdy pod indeksem kolekcji lub rozpocząć wypełnianie dostępnego miejsca na istniejącym slajdzie. Długi HTML jest automatycznie podzielony na dodatkowe slajdy, źródło może być podane jako ciąg znaków lub strumień, a zasoby zewnętrzne mogą być ładowane przy użyciu ExternalResourceResolver z bazowym URI. Zwrócona tablica Slide określa dotknięte i nowo utworzone slajdy.
Import z PDF
Aby przekonwertować dokument PDF na prezentację PowerPoint, zaimportuj jego zawartość do kolekcji slajdów i zapisz wynik jako plik PPTX.

- Utwórz nowy obiekt Presentation.
- Wywołaj addFromPdf z ścieżką do pliku PDF.
- Wywołaj save z SaveFormat.Pptx, aby zapisać prezentację do pliku PPTX.
Poniższy przykład w Pythonie importuje dokument PDF i zapisuje wygenerowane slajdy jako prezentację 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()
Domyślny pusty slajd pozostaje w prezentacji, ponieważ import dodaje slajdy. Aby zachować tylko zaimportowane strony, wyczyść kolekcję slajdów za pomocą SlideCollection.clear przed importem.
Metoda addFromPdf zwraca dodane slajdy, co jest przydatne, gdy trzeba przetworzyć wyłącznie zaimportowane slajdy.
Tip
Wypróbuj darmową aplikację internetową PDF to PowerPoint, aby zobaczyć ten proces konwersji w działaniu.Import z HTML
Aspose.Slides może również tworzyć slajdy z dokumentu HTML. Źródło może być podane jako tekst HTML lub strumień. Poniższe kroki używają strumienia pliku:
- Utwórz nowy obiekt Presentation.
- Otwórz plik HTML do odczytu i przekaż strumień do addFromHtml.
- Wywołaj save z SaveFormat.Pptx, aby zapisać wynik do pliku PPTX.
Poniższy przykład w Pythonie importuje dokument HTML i zapisuje wygenerowane slajdy jako prezentację 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()
Wstawianie treści HTML
Użyj SlideCollection.insertFromHtml gdy slajdy wygenerowane z HTML muszą być umieszczone w określonym miejscu zamiast dołączane. Indeks jest zerowy i określa pozycję, od której rozpoczyna się import.
Argument useSlideWithIndexAsStart kontroluje, w jaki sposób importer używa tej pozycji:
- Gdy jest
False, importer tworzy nowe slajdy pod określonym indeksem i przesuwa następujące po nich slajdy. - Gdy jest
True, importer rozpoczyna umieszczanie treści w dostępnym miejscu na istniejącym slajdzie pod tym indeksem. Jeśli HTML nie mieści się, Aspose.Slides automatycznie paginuje go i wstawia dodatkowe slajdy bezpośrednio po slajdzie początkowym.
SlideCollection.insertFromHtml zwraca tablicę obiektów Slide. Gdy wstawianie rozpoczyna się na nowych slajdach, każdy zwrócony element jest nowo utworzony. Gdy istniejący slajd jest użyty jako początek, tablica zawiera ten dotknięty slajd, a następnie wszystkie nowe slajdy przepełnienia. Możesz przejrzeć tę tablicę zamiast obliczać zakres dotknięty na podstawie liczby slajdów w prezentacji.
Wstawianie HTML jako nowe slajdy
Poniższy przykład podaje HTML jako ciąg znaków i wstawia wygenerowane slajdy pod indeksem kolekcji 1. Przekazanie False pozostawia istniejące slajdy niezmienione, oprócz ich przesunięcia w celu stworzenia miejsca.
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()
Rozpoczęcie na istniejącym slajdzie
Następny przykład podaje HTML poprzez strumień. Zachowuje kształt nagłówka na istniejącym szablonie slajdu, rozpoczyna import pod zajętym obszarem i pozwala długiej treści kontynuować na nowych slajdach.
HTML zawiera również względny adres URL obrazu. ExternalResourceResolver pobiera zasób, podczas gdy bazowy URI informuje importera, jak rozwiązać images/logo.png. W tym przykładzie plik jest oczekiwany w 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
Niezabezpieczony resolver zasobów zewnętrznych może odczytywać lokalne lub sieciowe zasoby odwoływane w HTML. Dla niezweryfikowanego wejścia należy weryfikować i oczyszczać adresy URL zasobów względem listy dozwolonych schematów, katalogów i hostów przed importowaniem HTML.FAQ
Czy Aspose.Slides może wykrywać tabele przy imporcie z PDF?
Tak. Utwórz obiekt PdfImportOptions, wywołaj setDetectTables z True i przekaż opcje do addFromPdf. Jakość rozpoznawania tabel zależy od struktury i złożoności źródłowego PDF.