【问题标题】:Converting multi-page PDFs to several JPGs using ImageMagick and/or GhostScript使用 ImageMagick 和/或 GhostScript 将多页 PDF 转换为多个 JPG
【发布时间】:2012-06-15 17:00:16
【问题描述】:

我正在尝试将多页 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>"
    

接着是一大堆错误。开头是:

    Unrecoverable error: rangecheck in.setuserparams
    Operand stack:

后面是一堆不可读的数字和大写字母。结尾是:

    While reading gs_lev2.ps:
    %%[ Error: invalidaccess; OffendingCommand: put ]%%

不用说,经过数小时的深思熟虑,我认为我离完成将这个 PDF 转换为 JPG 的看似简单的任务还差得远。

我想要一些关于如何完成这项工作的分步说明。不要遗漏任何东西,无论它看起来多么“明显”(尤其是任何涉及ghostscript的东西)。这几个月来一直困扰着我和我的主管。

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

求救!!!

【问题讨论】:

  • (已移除 R 标签;您甚至无法在命令行中执行此操作。)您的路径上是否还有 convert 可执行文件?我查看了 GS 文档,发现了关于如何使用它进行转换的完全不同的说明。
  • 它是否适用于单页 PDF?如果你安装了 pdftk,你可以输入pdftk input.pdf burst 来创建input_0001.pdfinput_0002.pdf,等等。然后,您可以尝试为每一页调用convert input_0001.pdf input_0001.jpg。那仍然给出相同的错误消息吗?
  • 这个答案是否正确? *.com/questions/4481573/…
  • DWin,我确实有一个转换可执行文件。它在我的 ImageMagick 文件夹中。使用它我可以在 JPG/PNG 之间进行转换。但是我根本无法从 PDF 进行任何转换(甚至没有一页。但我可以从 JPG 转换为 PDF,只是不能从 PDF 转换)。从我读过的其他地方,我觉得我应该使用GhostScript,但我不知道如何实现它。
  • 我先安装 GS,然后 Imagemagick 在测试之前重新启动 PC,它就可以工作了。你能用 Imagemagick 做其他事情来证明它是有效的吗?

标签: pdf imagemagick jpeg ghostscript


【解决方案1】:

还有许多 SaaS 服务也可以为您做到这一点。想到 HyPDF 和 Blitline。

【讨论】:

    【解决方案2】:

    您不需要 ImageMagick,Ghostscript 可以单独完成。 (如果您使用 ImageMagick,它自己无法进行转换,它使用 Ghostscript 作为它的'delegate'。)

    直接使用 Ghostscript 试试这个:

     c:\path\to\gswin32c.exe ^
       -o page_%03d.jpg ^
       -sDEVICE=jpeg ^
        d:/path/to/input.pdf
    

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

    注意,这也会创建使用 jpeg 设备的所有默认设置的 JPEG(最重要的设置之一是分辨率为 72dpi)。

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

     gswin32c.exe ^
       -o page_%03d.jpg ^
       -sDEVICE=jpeg ^
       -r300 ^
       -dJPEGQ=100 ^
        d:/path/to/input.pdf
    

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

    另请注意: JPEG 不太适合表示具有锐利边缘和高对比度的高质量形状(例如您通常在黑白中看到的)带有小字符的文本页面)。

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

    选择PNG作为输出格式可能会得到更好的图像输出(PNG使用无损压缩):

     gswin32c.exe ^
       -o page_%03d.png ^
       -sDEVICE=png16m ^
       -r150 ^
        d:/path/to/input.pdf
    

    png16m 设备产生 24 位 RGB 颜色。您可以将其替换为pnggray(用于纯灰度输出)、png256(用于 8 位颜色)、png16(4 位颜色)、pngmono(仅限黑白)或pngmonod(替代黑白模块)。

    【讨论】:

    • 感谢您的回复!当我尝试在命令提示符下输入您给我的内容时,它显示“gswin32.exe-o 未被识别为内部或外部命令、可操作文件或批处理文件。”我不应该在命令提示符下输入吗?或者我应该有一个不同的目录?
    • 你好像少了一个空格:gswin32.exe -o ...,而不是.exe-o
    • @Stephan Robert Kuban:不,你没有输入我给你的内容。我的示例在.exe 之后,-o... 之前有一个空白... - 此外,每行末尾的^ 意味着您可以将所有行(包括^)复制为一个块进入命令提示符并执行它。它是 'DOS 提示符' 和批处理文件的 行继续 符号。或者,您可以在一行中全部输入(但请跳过所有 ^ 字符!)。
    • 当然,我假设您知道如何从命令提示符运行命令并正确设置 PATH 环境变量(您的 PATH 中有安装 gswin32c.exe 的目录)。否则,只需使用这样的完整路径:e:\path\to\gswin32c.exe...
    • 天啊,非常感谢。我终于让它工作了。我真的很感谢你的帮助。非常感谢。