如何在linux中使用命令行将PDF转换为JPG?

Sör*_*ren 4 linux pdf jpeg converter

使用linux命令行将PDF转换为(单个)JPEG的快速可靠方法是什么?

Gab*_*les 31

在我的一生中,在过去的 5 年里,我无法让imagemagick始终如一地为我工作(如果有的话),我不知道为什么人们不断地一次又一次地推荐它。我今天刚刚在谷歌上搜索了如何将 PDF 转换为 JPEG,找到了这个答案,并尝试了convert,但它对我来说根本不起作用:

$ 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.
Run Code Online (Sandbox Code Playgroud)

然后,我想起了我使用并写过的另一个工具,所以我用谷歌搜索“ linux convert pdf to jpg Gabriel Staples ”,点击第一个点击,然后向下滚动到我的答案。这是对我来说完美的方法。这是基本的命令格式:

pdftoppm -jpeg -r 300 input.pdf output 
Run Code Online (Sandbox Code Playgroud)

-jpeg将输出图像格式为JPG,-r 300设置输出的图像分辨率为300 DPI,字output将前缀为图像的所有页面,将被编号并放置到你。一个更好的方式工作当前目录,然而,在我看来,是首先使用mkdir -p images创建一个“图像”目录,然后将输出设置为,images/pg以便所有输出图像都将干净地放入images您刚刚创建的目录pg中,每个数字前面都有文件前缀.

因此,这里是我最喜欢的命令:

  1. [每页产生约 1MB 大小的文件] 以.jpg格式以300 DPI输出:

     mkdir -p images && pdftoppm -jpeg -r 300 mypdf.pdf images/pg
    
    Run Code Online (Sandbox Code Playgroud)
  2. [每页生成约 2MB 大小的文件] 以.jpg格式以最高质量(最少压缩)300 DPI 输出

     mkdir -p images && pdftoppm -jpeg -jpegopt quality=100 -r 300 mypdf.pdf images/pg
    
    Run Code Online (Sandbox Code Playgroud)
  3. 如果您需要更高的分辨率,可以尝试 600 DPI:

     mkdir -p images && pdftoppm -jpeg -r 600 mypdf.pdf images/pg
    
    Run Code Online (Sandbox Code Playgroud)
  4. ...或 1200 DPI:

     mkdir -p images && pdftoppm -jpeg -r 1200 mypdf.pdf images/pg
    
    Run Code Online (Sandbox Code Playgroud)

有关更多详细信息和选项,请参阅下面的参考资料。

参考:

  1. [我的回答]将 PDF 转换为高分辨率图像
  2. [我的回答] https://askubuntu.com/questions/150100/extracting-embedded-images-from-a-pdf/1187844#1187844

关键词:ubuntu linux pdf转图片;pdf转jpeg;ptdf 到 tiff; pdf2图像;pdf2tiff; pdftoppm; pdftoimages; pdftotiff; pdftopng; pdf2png


Sör*_*ren 12

转换自imagemagick似乎做得很好:

convert file.pdf test.jpg 
Run Code Online (Sandbox Code Playgroud)

如果生成了多个文件:

convert test-0.jpg -append test-1.jpg ... -append one.jpg
Run Code Online (Sandbox Code Playgroud)

生成一个文件,其中所有页面都连接在一起。


小智 10

您可以尝试 imagemagick存储库然后convert实用程序:

$ sudo apt-get install imagemagick
$ convert input.pdf output.jpg
Run Code Online (Sandbox Code Playgroud)

另外,其他语法依赖于linux发行版.

  • 如果您收到类似“convert: notauthorized 'filename.pdf' @ error/constitute.c/ReadImage/412.”的错误,那么您需要修改“/etc/ImageMagick-6/policy.xml”或只是暂时重命名它。 (16认同)
  • 我需要这个来获得高质量的 JGP 而不是低分辨率的:`convert -密度 300 -quality 100 in.pdf out.jpg` (7认同)
  • 不幸的是这对我不起作用。请参阅“pdftoppm”答案以获得更有效的解决方案。 (3认同)
  • 那是什么怪物?为什么要有“政策”?这些愚蠢的规则是为了防止什么? (3认同)
  • @Guus:在我的policy.xml中,我需要注释掉行`<policy domain =“coder”rights =“none”pattern =“PDF”/>`。但当我遇到此错误时,我通常更喜欢暂时重命名该文件。 (2认同)

jcu*_*itt 8

libvips可以快速转换 PDF -> JPEG。它随大多数 linux 发行版一起提供,它是 macos 上的自制软件,您可以从 libvips 站点下载 Windows 二进制文件。

这将以默认 DPI (72) 将 PDF 呈现为 JPG:

vips copy somefile.pdf somefile.jpg
Run Code Online (Sandbox Code Playgroud)

您可以使用 dpi 选项设置一些其他渲染分辨率,例如:

vips copy somefile.pdf[dpi=600] somefile.jpg
Run Code Online (Sandbox Code Playgroud)

您可以选择这样的页面:

vips copy somefile.pdf[dpi=600,page=12] somefile.jpg
Run Code Online (Sandbox Code Playgroud)

或者像这样从第三页开始渲染五个页面:

vips copy somefile.pdf[dpi=600,page=3,n=5] somefile.jpg
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

所以 libvips 大约快 4 倍,并且需要一半的内存,至少在这个测试中是这样。