使用ImageMagick和/或GhostScript将多页PDF转换为多个JPG

Ste*_*hen 2 pdf jpeg imagemagick ghostscript

我正在尝试将多页PDF文件转换为一堆JPEG,一个用于PDF中的每个页面.我花了几个小时看着如何做到这一点,最终我发现我需要安装Ghostscript.所以我这样做了(来自这个网站:http://downloads.ghostscript.com/public/我使用了2012年2月8日的最新链接"ghostscript-9.05.tar.gz").

但是,即使已安装/下载,我仍然无法做我想要的.我应该将此保存在特殊的地方,例如与ImageMagick在同一文件夹中吗?

我到目前为止所知道的是:

  • 在命令提示符中,我将工作目录更改为保存它的ImageMagick文件夹.

  • 然后我输入

    convert "<full file path to pdf>" "<full file path to jpg>"
    
    Run Code Online (Sandbox Code Playgroud)

接下来是一大堆错误.它始于:

    Unrecoverable error: rangecheck in.setuserparams
    Operand stack:
Run Code Online (Sandbox Code Playgroud)

接着是一些难以理解的数字和大写字母.它结束于:

    While reading gs_lev2.ps:
    %%[ Error: invalidaccess; OffendingCommand: put ]%%
Run Code Online (Sandbox Code Playgroud)

毋庸置疑,经过数小时和数小时的审议后,我认为我没有更接近于将这个PDF转换为JPG的看似简单的任务.

我想要的是如何使这项工作一步一步的说明.不要遗漏任何东西,无论它看起来多么"明显"(尤其是涉及ghostscript的任何东西).几个月以来,这一直困扰着我和我的主管.

为了进一步说明,我们使用的是Windows XP操作系统.最终的目的是在R(统计语言)中调用这些命令行,并在脚本中运行它.此外,我已经能够成功地将JPG转换为PNG格式,反之亦然,但PDF只是不起作用.

救命!!!

Kur*_*fle 12

你不需要ImageMagick,Ghostscript可以独自完成.(如果你使用ImageMagick的,它不能做转换本身,它HAS使用的Ghostscript作为其"代理".)

试试这个直接使用Ghostscript:

 c:\path\to\gswin32c.exe ^
   -o page_%03d.jpg ^
   -sDEVICE=jpeg ^
    d:/path/to/input.pdf
Run Code Online (Sandbox Code Playgroud)

这将为每个页面创建一个新的JPEG,文件名将增加为page_001.jpg,page_002.jpg,...

请注意,这也将创建使用设备的所有默认设置的JPEG jpeg(其中一个最重要的设置是分辨率为72dpi).

如果您的图像需要更高(或更低分辨率),您可以添加其他选项:

 gswin32c.exe ^
   -o page_%03d.jpg ^
   -sDEVICE=jpeg ^
   -r300 ^
   -dJPEGQ=100 ^
    d:/path/to/input.pdf
Run Code Online (Sandbox Code Playgroud)

-r300将分辨率设置为300dpi并-dJPEGQ=100设置最高的JPEG质量级别(Ghostscript的默认值为75).

另请注意: JPEG不适合用于表现具有锐边和高对比度且高质量的形状(例如,您通常会在带有小字符的黑白文本页面中看到).

(有损)JPEG压缩方法针对连续色调图片+照片进行了优化,而不是针对线条图形进行了优化.因此,对于主要包含文本的PostScript或PDF输入页面,它是次优的.这里,即使输入非常好,JPEG格式的有损压缩也会导致较差的输出质量.有关此主题的更多详细信息,另请参阅JPEG FAQ.

通过选择PNG作为输出格式(PNG使用无损压缩),您可以获得更好的图像输出:

 gswin32c.exe ^
   -o page_%03d.png ^
   -sDEVICE=png16m ^
   -r150 ^
    d:/path/to/input.pdf
Run Code Online (Sandbox Code Playgroud)

png16m设备产生24位RGB颜色.你可以交换它pnggray(用于纯灰度输出),png256(用于8位颜色),png16(4位颜色),pngmono(仅黑色和白色)或pngmonod(替代黑白模块).