从PowerPoint演示文稿(.PPT)中以编程方式提取幻灯片为图像

24

如果给定一个以.ppt格式保存的PowerPoint演示文稿,使用开源软件并仅以编程方式提取每张幻灯片的图像表示(例如.jpg.png),最佳方法是什么?

应用程序将在Linux服务器环境中运行,因此安装Microsoft Office或Keynote不可行。

我想要实现的编程功能类似于:

  • Keynote的导出功能(文件 > 导出... > 图片 > JPEG
  • PowerPoint的“另存为JPEG”功能(另存为 > 其他格式 > JPEG
6个回答

24

你应该尝试使用unoconv。根据man页面的描述,"unoconv是一个命令行实用程序,可以将任何OpenOffice可以导入的文件格式转换为任何OpenOffice能够导出的文件格式。"

因此,要将ppt转换为png,你可以执行以下命令:

unoconv -f png some-slides.ppt

如果失败了,您可以尝试来自Art of Solving的JODConverterPyODConverter。例如,您可以使用命令行中的JODConverter:

java -jar lib/jodconverter-cli-2.2.0.jar document.ppt document.png

2
我认为这可能是最好的解决方案。但你应该知道它取决于Open Office。幸运的是,有OO headless,所以你不必搞乱xvfb。 - Maciek Sawicki
我尝试使用jodconverter,但它出现了noclassdeffound错误。 - Muhammad Muazzam
@MuhammadMuazzam 你使用了最新的JODConverter吗?最新的源代码/下载似乎在这里:https://github.com/sbraconnier/jodconverter/。 - William Niu

3

考虑到您需要在Linux上运行,最简单的方法可能是自动化OpenOffice.org。

将幻灯片导出为HTML格式将会得到一个可配置质量的JPEG或PNG图像。


2
如果可以使用Web API,我建议尝试使用Google Docs API。您可以上传PPT文档,然后以支持的任何格式之一下载,包括PDF和PNG。

2

Apache POI是一个Java库,但它有一个命令行实用程序,用于将PPTX文件转换为PNG文件。

要运行它,请在库的二进制下载文件夹的根目录中调用此命令:

java -cp "poi-3.10-FINAL-20140208.jar;poi-ooxml-3.10-FINAL-20140208.jar;poi-ooxml-schemas-3.10-FINAL-20140208.jar;ooxml-lib\dom4j-1.6.1.jar;ooxml-lib\stax-api-1.0.1.jar;ooxml-lib\xmlbeans-2.3.0.jar;lib\commons-codec-1.5.jar;lib\commons-logging-1.1.jar;lib\log4j-1.2.13.jar" org.apache.poi.xslf.util.PPTX2PNG presentation.pptx

虽然它不是100%完美的 - 我注意到它不喜欢WordArt或从PowerPoint内部裁剪的图像。


1

多年前,我曾经使用Slide Splitter来满足这个完全相同的需求。它可以处理ppt幻灯片,并导出为.jpeg格式。


这个有最新的链接吗? - Dean
@Dean 我能找到的唯一一个是在http://sourceforge.net/projects/ooomacros/files/Slide%20Splitter/。 - Todd Main
警告!该链接似乎被特洛伊病毒感染。 - rjobidon
1
SourceForge感染了病毒?你可能需要通知他们。 - Todd Main

1

我们可以使用ImageMagick将pptx转换为pdf,然后再将pdf转换为JPEG图像。以下是在Ubuntu上适用的方法。

首先,我们需要安装几个软件包:

apt update && apt install libreoffice imagemagick ghostscript

现在,使用以下命令将pptx文件转换为PDF:

soffice --headless --convert-to pdf test.pptx

生成的PDF文件名为test.pdf。然后我们可以使用imagemagick将PDF转换为jpeg图像:

# you can tweak density and quality to change the quality of generated images.
convert -density 150 test.pdf -quality 80 output-%3d.jpg

如果在运行上述命令时遇到错误,请编辑/etc/ImageMagick-6/policy.xml文件并更改以下行:
<policy domain="coder" rights="none" pattern="PDF" />

<policy domain="coder" rights="read|write" pattern="PDF" />

参考资料:这个回答基于这里的帖子。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接