Převod prezentací PowerPoint do dokumentů Word v Pythonu přes Java

Přehled

Tento článek vysvětluje, jak převést prezentace PowerPoint a OpenDocument do dokumentů Word pomocí Aspose.Slides pro Python přes Java spolu s Aspose.Words pro Java. Aspose.Slides vykresluje každý snímek a čte jeho text, zatímco Aspose.Words vytváří dokument Word pomocí JPype. Microsoft Office není vyžadován.

Výsledný dokument obsahuje obrázek snímku následovaný editovatelným textem extrahovaným z horních automatických tvarů snímku. Obrázek zachovává vizuální vzhled snímku; jednotlivé tvary, grafy a tabulky nejsou převedeny na editovatelné objekty Wordu. Extrahovaný text si neuchovává původní formátování textu ani umístění.

Převod PowerPointu do Wordu

  1. Nainstalujte Aspose.Slides for Python via Java a kompatibilní Java runtime.
  2. Stáhněte Aspose.Words for Java. Umístěte jeho hlavní JAR soubor do adresáře lib vedle vašeho skriptu a přejmenujte jej na aspose-words.jar, nebo upravte cestu v příkladu tak, aby odpovídala staženému souboru.
  3. Umístěte vstupní prezentaci sample.pptx do pracovního adresáře. Cesta lib/aspose-words.jar je také relativní k tomuto adresáři.
  4. Spusťte následující Python kód pro vytvoření output.docx.

Příklad načítá zdroj pomocí Presentation a vykresluje snímky pomocí Slide.getImage. Používá DocumentBuilder z Aspose.Words k vložení obrázků a textu do dokumentu Word.

from pathlib import Path

import jpype
import asposeslides

words_jar = Path("lib/aspose-words.jar").resolve()
jpype.addClassPath(str(words_jar))
if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import AutoShape, ImageFormat, Presentation

ByteArrayOutputStream = jpype.JClass("java.io.ByteArrayOutputStream")
Document = jpype.JClass("com.aspose.words.Document")
DocumentBuilder = jpype.JClass("com.aspose.words.DocumentBuilder")
BreakType = jpype.JClass("com.aspose.words.BreakType")

presentation = Presentation("sample.pptx")
try:
    document = Document()
    builder = DocumentBuilder(document)
    page_setup = builder.getPageSetup()
    content_width = page_setup.getPageWidth() - page_setup.getLeftMargin() - page_setup.getRightMargin()
    slide_size = presentation.getSlideSize().getSize()
    image_height = content_width * slide_size.getHeight() / slide_size.getWidth()
    slide_count = presentation.getSlides().size()

    for slide_index in range(slide_count):
        if slide_index > 0:
            builder.insertBreak(BreakType.PAGE_BREAK)

        slide = presentation.getSlides().get_Item(slide_index)
        image = slide.getImage(1.0, 1.0)
        try:
            image_stream = ByteArrayOutputStream()
            try:
                image.save(image_stream, ImageFormat.Png)
                image_bytes = image_stream.toByteArray()
            finally:
                image_stream.close()
        finally:
            image.dispose()

        # Přizpůsobte obrázek snímku šířce textové oblasti při zachování poměru stran.
        builder.insertImage(image_bytes, content_width, image_height)
        builder.writeln()

        # Přidejte prostý text z hlavních automatických tvarů, včetně textových polí.
        for shape in slide.getShapes():
            if isinstance(shape, AutoShape):
                text_frame = shape.getTextFrame()
                if text_frame is not None:
                    text = str(text_frame.getText())
                    if text.strip():
                        builder.writeln(text)

    document.save("output.docx")
finally:
    presentation.dispose()

Každý snímek začíná na nové stránce. Dlouhý extrahovaný text nebo neobvykle vysoké obrázky snímků mohou vyžadovat další stránky. Kód přidává zalomení stránky pouze mezi snímky a uvolňuje prezentaci a vykreslené obrázky v blocích finally. JVM zůstává dostupný pro následné převody ve stejném Python procesu.

Často kladené otázky

Které knihovny jsou vyžadovány?

Použijte Aspose.Slides pro Python přes Java, JPype, kompatibilní Java runtime a Aspose.Words pro Java. Obě knihovny Aspose běží ve stejném JVM. Aspose.Slides zpracovává prezentaci; Aspose.Words zapisuje dokument Word.

Mohu převádět soubory PPT a ODP stejně jako PPTX?

Ano. Nahraďte sample.pptx souborem PPT nebo ODP. Viz Supported File Formats pro vstupní formáty prezentací.

Je celý obsah snímku editovatelný ve Wordu?

Ne. Každý snímek je vložen jako statický obrázek, pod ním je přidán prostý text z horních automatických tvarů. Text uvnitř skupin, tabulek, SmartArt a grafů, stejně jako poznámky k řečníkovi, není tímto příkladem extrahován. Animace a přechody nejsou v dokumentu Word reprodukovány.

Mohu uložit jako DOC místo DOCX?

Ano. Změňte název výstupního souboru na output.doc. Aspose.Words vybírá výstupní formát podle přípony souboru při použití tohoto přetížení metody ukládání.