在HTML中将PDF显示为图片
在浏览器中用HTML显示PDF的最佳方法是什么?
这里的主要目标是把PDF显示得像普通图片一样。网站的用户上传一个PDF文件,这个文件会被用PyPDF分成不同的页面,然后每一页都应该在网页上显示出来。也就是说,每一页都作为一张不同的图片来展示。
理想的情况是这样的:
<img src="test_page1.pdf">
<img src="test_page2.pdf">
我一直在尝试使用ImageMagick(Python)把我的PDF转换成图片,但这过程中遇到了一些困难:
- 有时会崩溃
- 图片质量严重下降
- 文件大小增加
有没有更好的方法来实现这个目标?如果有的话,我更希望使用一种不依赖服务器的方法!
4 个回答
试试这个网站 http://view.samurajdata.se/。你可以用这个工具在HTML中把PDF文件显示成图片。它是开源的,使用起来也很简单。
请注意,这个方法是用PHP语言实现的。
使用convert是可以的,但我发现用evince-thumbnailer效果更好,速度快了大约8倍,质量也差不多(具体情况可能会有所不同)。
不过,evince-thumbnailer虽然不需要ghostscript这个工具,但它会引入一些其他的gnome相关工具,比如glib和gtk。
你也可以使用poppler里的工具,比如pdftops。这些工具比convert快得多,而且几乎没有依赖,但质量可能会有所下降。
这里有一些命令行供大家参考……我做了一个全页300dpi的测试,并添加了结果。请注意,我使用的是非常大的输出文件,以便在鼠标悬停时放大缩略图。你也可以使用更小的jpg文件,这样结果会更快。
# This produces perfect png at 2480 pixels width.
# Takes averagely long (45sec).
# 2480 is A4 pixel width at 300dpi
evince-thumbnailer -s 2480 -l input.pdf /tmp/output.png
convert /tmp/output.png -quality 85% output.jpg
# This renders perfect jpg at 2400 pixels width.
# Takes extremely long. (6m)
# Quality is comparable
convert -density 300x300 input.pdf -resize 2400x -units PixelsPerInch \
-quality 85% output.jpg
# This uses poppler to convert to ps and then converts to jpg.
# Takes averagely long (45sec)
# Does not compete quality-wise.
pdftops -l 1 -r 2400 -paper A4 input.pdf /tmp/output.ps
convert /tmp/output.ps output.jpg
不是在客户端,而是在...
exec("convert sample.pdf sample.jpeg")
使用 ImageMagick
,你可以访问这个网站 http://www.imagemagick.org/script/index.php 或者这个 http://www.imagemagick.org/script/api.php#python
我觉得如果在客户端做这个会很困难。服务器端的处理能力更强,可以更快地生成更高质量的图片,并且可以进行更多的自定义设置。