Конвертация презентаций PowerPoint в документы Word с помощью Python через Java
Обзор
В этой статье объясняется, как преобразовать презентации PowerPoint и OpenDocument в документы Word с использованием Aspose.Slides for Python via Java вместе с Aspose.Words for Java. Aspose.Slides рендерит каждый слайд и считывает его текст, тогда как Aspose.Words создает документ Word через JPype. Microsoft Office не требуется.
Полученный документ содержит изображение слайда, за которым следует редактируемый текст, извлечённый из верхнеуровневых автоформ слайда. Изображение сохраняет визуальный вид слайда; отдельные формы, диаграммы и таблицы не преобразуются в редактируемые объекты Word. Извлечённый текст не сохраняет исходное форматирование или позиционирование.
Преобразовать PowerPoint в Word
- Установите Aspose.Slides for Python via Java и совместимую Java-runtime.
- Скачайте Aspose.Words for Java. Поместите основной JAR-файл в каталог
libрядом со скриптом и переименуйте его вaspose-words.jar, либо измените путь в примере, чтобы он соответствовал скачанному файлу. - Поместите исходную презентацию
sample.pptxв рабочий каталог. Путьlib/aspose-words.jarтакже относителен этого каталога. - Запустите следующий код Python, чтобы создать
output.docx.
В примере исходный файл загружается с помощью Presentation и рендерит слайды с помощью Slide.getImage. Для вставки изображений и текста в документ Word используется DocumentBuilder из Aspose.Words.
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()
# Подгоните изображение слайда по ширине текстовой области, сохраняя его пропорции.
builder.insertImage(image_bytes, content_width, image_height)
builder.writeln()
# Добавьте простой текст из верхнеуровневых автоформ, включая текстовые поля.
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()
Каждый слайд начинается на новой странице. Длинный извлечённый текст или необычно высокие изображения слайдов могут потребовать дополнительных страниц. Код добавляет разрывы страниц только между слайдами и освобождает презентацию и отрендеренные изображения в блоках finally. JVM остаётся доступной для последующих преобразований в том же процессе Python.
FAQ
Какие библиотеки требуются?
Используйте Aspose.Slides for Python via Java, JPype, совместимую Java-runtime и Aspose.Words for Java. Оба продукта Aspose работают в одной JVM. Aspose.Slides обрабатывает презентацию; Aspose.Words записывает документ Word.
Можно ли конвертировать файлы PPT и ODP, а также PPTX?
Да. Замените sample.pptx на файл PPT или ODP. См. Supported File Formats для поддерживаемых форматов входных презентаций.
Весь ли контент слайда редактируем в Word?
Нет. Каждый слайд вставляется как статическое изображение, а под ним добавляется обычный текст из верхнеуровневых автоформ. Текст, находящийся внутри групп, таблиц, SmartArt и диаграмм, а также заметки спикера, не извлекается этим примером. Анимации и переходы не воспроизводятся в документе Word.
Можно ли сохранить как DOC вместо DOCX?
Да. Измените имя выходного файла на output.doc. Aspose.Words выбирает формат вывода по расширению имени файла при использовании этой перегрузки метода save.