Import prezentací z PDF nebo HTML v Pythonu pomocí Java

Úvod

Aspose.Slides pro Python prostřednictvím Java může převést stránky PDF nebo obsah HTML na snímky PowerPointu bez Microsoft PowerPoint. Třída SlideCollection poskytuje addFromPdf a addFromHtml pro přidání importovaného obsahu do prezentace.

Pro větší kontrolu nad umístěním HTML může SlideCollection.insertFromHtml vložit vygenerované snímky na index kolekce nebo začít zaplňovat dostupný prostor na existujícím snímku. Dlouhé HTML je automaticky rozděleno na další snímky, zdroj lze poskytnout jako řetězec nebo stream a externí zdroje lze načíst pomocí ExternalResourceResolver s základní URI. Vrácené pole Slide identifikuje dotčené a nově vytvořené snímky.

Import z PDF

Pro převod dokumentu PDF na prezentaci PowerPoint importujte jeho obsah do kolekce snímků a uložte výsledek jako soubor PPTX.

pdf-to-powerpoint

  1. Vytvořte nový objekt Presentation.
  2. Zavolejte addFromPdf s cestou k souboru PDF.
  3. Zavolejte save s SaveFormat.Pptx pro zápis prezentace do souboru PPTX.

Následující příklad v Pythonu importuje dokument PDF a uloží vygenerované snímky jako prezentaci 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()

Výchozí prázdný snímek zůstane v prezentaci, protože import přidává snímky. Pro zachování pouze importovaných stránek vymažte kolekci snímků metodou SlideCollection.clear před importem.

Metoda addFromPdf vrací snímky, které přidá, což je užitečné, pokud potřebujete zpracovat jen importované snímky.

Import z HTML

Aspose.Slides může také vytvořit snímky z dokumentu HTML. Zdroj lze poskytnout jako text HTML nebo stream. Následující kroky používají souborový stream:

  1. Vytvořte nový objekt Presentation.
  2. Otevřete soubor HTML pro čtení a předejte stream metodě addFromHtml.
  3. Zavolejte save s SaveFormat.Pptx pro zápis výsledku do souboru PPTX.

Následující příklad v Pythonu importuje dokument HTML a uloží vygenerované snímky jako prezentaci 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()

Vložení HTML obsahu

Použijte SlideCollection.insertFromHtml, když je potřeba umístit snímky generované HTML na konkrétní pozici místo jejich připojení. Index je nulový a určuje pozici, kde import začne.

Argument useSlideWithIndexAsStart řídí, jak importér tuto pozici používá:

  • Když je False, importér vytváří nové snímky na zadaném indexu a posouvá následující snímky.
  • Když je True, importér začne umisťovat obsah do dostupného prostoru na existujícím snímku na tomto indexu. Pokud HTML nepadne, Aspose.Slides jej automaticky rozčlení a vloží další snímky ihned za úvodní snímek.

SlideCollection.insertFromHtml vrací pole objektů Slide. Když vkládání začíná na nových snímcích, každý vrácený prvek je nově vytvořený. Když je jako výchozí použit existující snímek, pole obsahuje tento dotčený snímek následovaný všemi novými přetékajícími snímky. Místo výpočtu dotčeného rozsahu z počtu snímků prezentace můžete toto pole prozkoumat.

Vložení HTML jako nové snímky

Následující příklad předává HTML jako řetězec a vkládá vygenerované snímky na index kolekce 1. Předání False ponechá existující snímky nezměněné, pouze je posune, aby vzniklo místo.

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

Začátek na existujícím snímku

Další příklad předává HTML prostřednictvím streamu. Zachovává tvar nadpisu na existujícím šablonovém snímku, začíná import pod obsazenou oblastí a umožňuje dlouhému tělu pokračovat na nové snímky.

HTML také obsahuje relativní URL obrázku. ExternalResourceResolver získá prostředek, zatímco základní URI říká importérovi, jak rozpoznat images/logo.png. V tomto příkladu se očekává, že soubor bude umístěn v 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()

Často kladené otázky

Dokáže Aspose.Slides detekovat tabulky při importu PDF?

Ano. Vytvořte objekt PdfImportOptions, zavolejte setDetectTables s True a předáte možnosti metodě addFromPdf. Kvalita rozpoznávání tabulek závisí na struktuře a složitosti původního PDF.