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
- Nainstalujte Aspose.Slides for Python via Java a kompatibilní Java runtime.
- Stáhněte Aspose.Words for Java. Umístěte jeho hlavní JAR soubor do adresáře
libvedle vašeho skriptu a přejmenujte jej naaspose-words.jar, nebo upravte cestu v příkladu tak, aby odpovídala staženému souboru. - Umístěte vstupní prezentaci
sample.pptxdo pracovního adresáře. Cestalib/aspose-words.jarje také relativní k tomuto adresáři. - 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í.