如果给定一个以.ppt
格式保存的PowerPoint演示文稿,使用开源软件并仅以编程方式提取每张幻灯片的图像表示(例如.jpg
或.png
),最佳方法是什么?
应用程序将在Linux服务器环境中运行,因此安装Microsoft Office或Keynote不可行。
我想要实现的编程功能类似于:
- Keynote的导出功能(
文件 > 导出... > 图片 > JPEG
) - PowerPoint的“另存为JPEG”功能(
另存为 > 其他格式 > JPEG
)
如果给定一个以.ppt
格式保存的PowerPoint演示文稿,使用开源软件并仅以编程方式提取每张幻灯片的图像表示(例如.jpg
或.png
),最佳方法是什么?
应用程序将在Linux服务器环境中运行,因此安装Microsoft Office或Keynote不可行。
我想要实现的编程功能类似于:
文件 > 导出... > 图片 > JPEG
)另存为 > 其他格式 > JPEG
)你应该尝试使用unoconv
。根据man页面的描述,"unoconv是一个命令行实用程序,可以将任何OpenOffice可以导入的文件格式转换为任何OpenOffice能够导出的文件格式。"
因此,要将ppt转换为png,你可以执行以下命令:
unoconv -f png some-slides.ppt
如果失败了,您可以尝试来自Art of Solving的JODConverter或PyODConverter。例如,您可以使用命令行中的JODConverter:
java -jar lib/jodconverter-cli-2.2.0.jar document.ppt document.png
考虑到您需要在Linux上运行,最简单的方法可能是自动化OpenOffice.org。
将幻灯片导出为HTML格式将会得到一个可配置质量的JPEG或PNG图像。
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内部裁剪的图像。
多年前,我曾经使用Slide Splitter来满足这个完全相同的需求。它可以处理ppt幻灯片,并导出为.jpeg格式。
我们可以使用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" />
参考资料:这个回答基于这里的帖子。