在Linux命令行中,快速可靠地将PDF转换为单个JPEG的方法是什么?
在Linux命令行中,快速可靠地将PDF转换为单个JPEG的方法是什么?
convert
命令,但对我来说根本不起作用:
错误的命令(对我无效):
# BROKEN cmd
$ convert in.pdf out.jpg
convert-im6.q16: not authorized `in.pdf' @ error/constitute.c/ReadImage/412.
convert-im6.q16: no images defined `out.jpg' @ error/convert.c/ConvertImageCommand/3258.
convert
将正常工作。另请参阅我在这里的评论,以及我的评论在这个答案下面。然而,我仍然更喜欢下面的pdftoppm
。)# GOOD cmd
pdftoppm -jpeg -r 300 input.pdf output
注意:在Linux Ubuntu上,您可能需要执行sudo apt update && sudo apt install poppler-utils
来安装pdftoppm
。谢谢,@Reynadan。
-jpeg
将输出图像格式设置为JPG,-r 300
将输出图像分辨率设置为300 DPI,并且单词output
将作为所有图像页面的前缀,它们将被编号并放置在您当前工作目录中。然而,我个人认为更好的方式是首先使用mkdir -p images
创建一个名为"images"的目录,然后将输出设置为images/pg
,这样所有输出图像将整洁地放置在您刚创建的images
目录中,每个图像的文件前缀为pg
加上相应的数字。
因此,这是我最喜欢的命令:
mkdir -p images && pdftoppm -jpeg -r 300 mypdf.pdf images/pg
mkdir -p images && pdftoppm -jpeg -jpegopt quality=100 -r 300 mypdf.pdf images/pg
mkdir -p images && pdftoppm -jpeg -r 600 mypdf.pdf images/pg
mkdir -p images && pdftoppm -jpeg -r 1200 mypdf.pdf images/pg
convert
命令我认为是有问题的,但它被接受为正确答案。我觉得我需要提供理由,解释为什么我要给一个已经有了被接受和高赞的答案的3年老问题添加一个新的答案。直到最近一个月左右,我的答案才终于超过了原始答案的投票数。 - Gabriel Staplespdftoppm
对我很有帮助。convert
也可以,但生成的 JPEG 图片非常模糊。使用 pdftoppm
的结果要好得多。因此,即使您没有 convert
不起作用的问题,我仍然建议使用 pdftoppm
。 - Andycsudo apt install poppler-utils
命令来使用 pdftoppm 命令。 - Reynadan您可以尝试使用ImageMagick的convert
工具。
在Ubuntu上,您可以使用以下命令安装它:
$ sudo apt-get install imagemagick
像这样使用convert
:
$ convert input.pdf output.jpg
# For good quality use these parameters
$ convert -density 300 -quality 100 in.pdf out.jpg
convert -density 300 -quality 100 in.pdf out.jpg
。 - Matthias Braun<policy domain="coder" rights="none" pattern="PDF" />
这行注释掉。但通常我遇到这个错误时更倾向于暂时重命名该文件。 - mivklibvips可以快速地将PDF转换为JPEG。它随附于大多数Linux发行版中,在macOS上的homebrew中也有,您还可以从libvips网站下载Windows二进制文件。
这将在默认DPI(72)下将PDF渲染为JPG:
vips copy somefile.pdf somefile.jpg
您可以使用dpi选项设置其他渲染分辨率,例如:
vips copy somefile.pdf[dpi=600] somefile.jpg
您可以像这样选择页面:
vips copy somefile.pdf[dpi=600,page=12] somefile.jpg
或者按以下方式从第三页开始呈现五页:
vips copy somefile.pdf[dpi=600,page=3,n=5] somefile.jpg
pdfload文档包含所有选项。
使用此基准图像,我看到:
$ /usr/bin/time -f %M:%e convert -density 300 r8.pdf[3] x.jpg
276220:2.17
$ /usr/bin/time -f %M:%e pdftoppm -jpeg -r 300 -f 3 -l 3 r8.pdf x.jpg
91160:1.24
$ /usr/bin/time -f %M:%e vips copy r8.pdf[page=3,dpi=300] x.jpg
149572:0.53
所以至少在这个测试中,libvips大约快了4倍且需要一半的内存。
看起来使用 imagemagick
进行转换效果不错:
convert file.pdf test.jpg
如果有多个文件生成:
convert test-0.jpg -append test-1.jpg ... -append one.jpg
convert
关键字用单破折号指定,例如 -append test-1.jpg
等。 - Stefan van der Walt