怎么把PDF转换成图像?


Answers:


299
  1. 安装imagemagick

  2. 使用PDF所在的终端:

    • 对于完整的文档:

      convert -density 150 input.pdf -quality 90 output.png
      
    • 对于单个页面:

      convert -density 150 input.pdf[666] -quality 90 output.png
      

从而:

  • 可以选择PNG,JPG或(几乎)任何其他图像格式。

  • -density xxx将DPI设置为xxx(通常为150和300)。

  • -quality xxx会将xxxPNG,JPG和MIFF文件格式的压缩率设置为(100表示​​不压缩)。

  • [666]只会将第667页转换为PNG(从零开始的编号,因此[0]第一页也是如此)。

  • 所有其他选项(例如修剪,灰度等)都可以在Image Magic的网站上查看


2
答案是可以的,但是分辨率很差。因此,当前没有有用的答案。也许如果convert具有一些可以指定的参数,则可能会更改。
伊利亚·林恩

48
这个答案的质量要高得多。askubuntu.com/a/50180/11929
Elijah Lynn

6
您可以通过添加改变密度-density 300参数
OHLÁLÁ

4
因此,有人可以确认指定密度使其与此处的其他答案“一样好”吗?另外,作为对追随者的说明,ImageMagick呼唤“ ghostscript”以实际上从pdf转换为png ex:gs -q NOPROMPT ...-sDEVICE=pngalpha -r150x150 -sOutputFile=/var/tmp/Yf%d -f/var/tmp/L -f/var/tmp/Fic1如果得到,convert: no images defined output.png则意味着您没有安装ghostscript ...
rogerdpack

4
在imagemagick中解析PDF已被禁用-bugs.archlinux.org/task/59778-可通过编辑/etc/ImageMagick-7/policy.xml文件并PDF从中删除来手动启用<policy domain="coder" rights="none" pattern="{PS,PS2,PS3,EPS,PDF,XPS}" />
Jezor

392

您可以pdftoppm用来将PDF转换为PNG:

pdftoppm input.pdf outputname -png

使用格式这将输出的每一页的PDF outputname-01.png,与01作为页面的索引。

转换PDF的一页

pdftoppm input.pdf outputname -png -f {page} -singlefile

更改{page}为页码。它的索引为1,因此-f 1第一页将为索引。

指定转换后的图像的分辨率

此命令的默认分辨率为150 DPI。增加它会导致更大的文件大小和更多细节。

要提高转换后的PDF的分辨率,请添加选项-rx {resolution}-ry {resolution}。例如:

pdftoppm input.pdf outputname -png -rx 300 -ry 300

24
非常感谢。质量比imagemagick或graphicsmagick好得多!
dAnjou

7
pdftoppm比转换要快得多
zuo

4
这确实比imagemagick好得多。在我看来,Imagemagick实际上以一种意想不到的方式改变了颜色!
NoBackingDown

13
很好!但是,-r 300如果您想将x和y分辨率设置为相同的值,则编写起来要容易一些,而不是分别指定x和y分辨率。
mlc 2015年

2
我使用pdftoppm取得了比imagemagick更大的成功。
Michael Hays '18

22

IIRC GIMP能够使用PDF,即将它们转换为图像。因此,如果您想立即编辑图像-GIMP是您的朋友。


GIMP确实可以打开PDF,每一页都是一层。选择“导出为”似乎仅保存当前层,但是您可以在导出后轻松删除该层并再次运行“导出为”。
Dan Dascalescu

12

当前接受的答案可以完成工作,但是会导致输出尺寸较大并且质量下降。

此处给出的答案中的方法所产生的输出的大小与输入的大小相当,并且不会遭受质量损失。

TLDR-用途pdfimagespdfimages -j input.pdf output

引用链接的答案:

您不清楚“质量损失”是什么意思。那可能意味着很多不同的事情。您可以张贴一些样本进行说明吗?也许从质量较差和质量好的版本中删除同一部分(作为PNG,以避免进一步的质量损失)。

也许您需要使用-density更高的dpi进行转换:

convert -density 300 file.pdf page_%04d.jpg

(您可以添加前缀-units PixelsPerInch,也可以-units PixelsPerCentimeter根据需要添加。我的副本默认为ppi。)

更新: 正如您指出的那样,gscan2pdf(使用方式)只是pdfimages(来自poppler)的包装。 pdfimages 不这样做同样的事情convert给出一个PDF作为输入时一样。

convert 提取PDF,以某种分辨率进行渲染,然后将生成的位图用作源图像。

pdfimages在PDF中查找嵌入的位图图像,并将每个图像导出到一个文件中。它只是忽略了PDF中的任何文本或矢量绘图命令。

结果,如果您拥有的只是只是一系列位图的包装的PDF,pdfimages则提取位图会做得更好,因为它可以为您提供原始大小的原始数据。您可能还希望使用-j选项pdfimages,因为PDF可以包含原始JPEG数据。默认情况下,pdfimages将所有内容都转换为PNM格式,并且将JPEG> PPM> JPEG转换是有损过程。

所以,尝试

pdfimages -j file.pdf page

您可能会或可能不会需要遵循与convert.jpg步骤(取决于PDF是用什么位图格式)。

我在以一系列JPEG图像制作的PDF上尝试了此命令。提取的JPEG与源图像逐字节相同。您无法获得更高的质量。


8

如果扫描了pdf,则图像已作为pdf的一部分存储。您只需要使用以下命令提取它们pdfimages

pdfimages my-file.pdf prefix 

2
这是扫描pdf的完美解决方案,因为您可以使用一个命令提取原始jpg,而无需进一步重新压缩。
JoseGómez'16

3

要从gm convert获得单个页面,请在PDF名称中添加[N](其中N的页码从0开始),即gm convert foo.pdf[11] out.png从PDF获取第12页。

对于pdftoppmuse -f N -singlefile,其中N是从1开始的页码,即pdftoppm -f 12 -singlefile foo.pdf out得到相同的结果。它似乎总是将“ .png”添加到输出文件名,并且没有办法阻止它。


2

您可以使用转换并使用-density选项指定更高的密度 。

例如。 convert -d 300 foo.pdf bar.png


您能否进一步解释什么是密度及其可以做什么?
rɑːdʒɑ

1
@AgentCool它指定水平和垂直图像密度(以ppi为单位)。
Arjun 2014年

2

如果您只想将PDF的特定页面转换为PNG,则可以像这样通过管道pdftk传输到convert如上所述):

pdftk document.pdf cat 12 output - | convert - document-page-12.png

1

Master PDF Editor(2.2版)具有此选项。打开PDF文件,然后转到“文件”>“导出到”>“图像”。它显示一个对话框,您可以在其中定义输出的不同选项。非常有用。希望此信息对您有所帮助。


是免费版还是付费版?在我的版本中,该选项显示为灰色?这是否意味着我需要付款?有付费版本吗?
Joshua Robison

0

PDF Mod还允许导出PDF文件的所有或单个页面的图像。

  • 在PDF Mod中打开PDF文件
  • 选择页面-
  • 编辑>导出图像
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.