在Windows上获取PDF的预览JPEG?
我有一个跨平台的应用程序(用Python写的),需要生成PDF文件第一页的JPEG预览图。
在Mac上,我使用了一个叫做 sips 的工具。那么在Windows上,有没有类似简单的方法可以做到这一点呢?
3 个回答
这台电脑上可能装有Acrobat吗?我觉得Acrobat会安装一个壳扩展,这样在Windows资源管理器的缩略图视图中就能看到PDF文档第一页的预览。你自己也可以通过IExtractImage这个COM API来获取缩略图,不过你需要对它进行一些封装。VBAccelerator有一个C#的例子,你可以把它移植到Python中。
你可以使用ImageMagick的convert工具来实现这个功能,具体的例子可以参考这个链接:http://studio.imagemagick.org/pipermail/magick-users/2002-May/002636.html:
Convert taxes.pdf taxes.jpg
这个命令可以把一个包含两页的PDF文件转换成两个JPEG文件:taxes.jpg.0和taxes.jpg.1。
我还可以把这些JPEG文件转换成缩略图,方法如下:
convert -size 120x120 taxes.jpg.0 -geometry 120x120 +profile '*' thumbnail.jpg
我甚至可以直接把PDF文件转换成JPEG缩略图,方法如下:
convert -size 120x120 taxes.pdf -geometry 120x120 +profile '*' thumbnail.jpg
这样会生成两个文件:thumbnail.jpg.0和thumbnail.jpg.1,分别对应PDF的两页。
ImageMagick会把PDF转换成位图的工作交给GhostScript来处理,所以这里有一个你可以使用的命令(这个命令是基于ImageMagick中ps:alpha
的实际命令,只是调整成输出JPEG格式):
gs -q -dQUIET -dPARANOIDSAFER -dBATCH -dNOPAUSE -dNOPROMPT \
-dMaxBitmap=500000000 -dLastPage=1 -dAlignToPixels=0 -dGridFitTT=0 \
-sDEVICE=jpeg -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -r72x72 \
-sOutputFile=$OUTPUT -f$INPUT
在这里,$OUTPUT
和$INPUT
分别是输出文件名和输入文件名。你可以根据需要调整72x72
这个分辨率。(显然,如果你要把整个命令写成一行,就把反斜杠去掉。)
这个方法有两个好处:
- 你不需要再安装ImageMagick了。虽然我对ImageMagick没有什么意见(我非常喜欢它),但我相信简单的解决方案更好。
- ImageMagick的转换是分两步的。先把PDF转换成PPM,然后再把PPM转换成JPEG。这样的话,转换就变成一步了。
还有其他需要考虑的事情:根据我测试的文件,PNG格式的压缩效果比JPEG好。如果你想使用PNG格式,可以把-sDEVICE=jpeg
改成-sDEVICE=png16m
。