在Windows上获取PDF的预览JPEG?

59 投票
3 回答
18039 浏览
提问于 2025-04-11 00:05

我有一个跨平台的应用程序(用Python写的),需要生成PDF文件第一页的JPEG预览图。

在Mac上,我使用了一个叫做 sips 的工具。那么在Windows上,有没有类似简单的方法可以做到这一点呢?

3 个回答

5

这台电脑上可能装有Acrobat吗?我觉得Acrobat会安装一个壳扩展,这样在Windows资源管理器的缩略图视图中就能看到PDF文档第一页的预览。你自己也可以通过IExtractImage这个COM API来获取缩略图,不过你需要对它进行一些封装。VBAccelerator有一个C#的例子,你可以把它移植到Python中。

16

你可以使用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的两页。

44

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这个分辨率。(显然,如果你要把整个命令写成一行,就把反斜杠去掉。)

这个方法有两个好处:

  1. 你不需要再安装ImageMagick了。虽然我对ImageMagick没有什么意见(我非常喜欢它),但我相信简单的解决方案更好。
  2. ImageMagick的转换是分两步的。先把PDF转换成PPM,然后再把PPM转换成JPEG。这样的话,转换就变成一步了。

还有其他需要考虑的事情:根据我测试的文件,PNG格式的压缩效果比JPEG好。如果你想使用PNG格式,可以把-sDEVICE=jpeg改成-sDEVICE=png16m

撰写回答