Ghostscript:“不可恢复的错误:setpagedevice 中的未定义文件名”

Posted

技术标签:

【中文标题】Ghostscript:“不可恢复的错误:setpagedevice 中的未定义文件名”【英文标题】:Ghostscript: "Unrecoverable error: undefinedfilename in setpagedevice" 【发布时间】:2014-12-13 00:48:31 【问题描述】:

我正在尝试使用这样的 ghostscript 压缩 pdf 文件:

gs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -dCompatibilityLevel=1.4 -dNOPAUSE -dBATCH  -sOutputfile=output.pdf input.pdf 

我过去成功地做到了这一点,但由于某种原因,现在它不起作用了。我收到以下错误:

GPL Ghostscript 9.15 (2014-09-22)
Copyright (C) 2014 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
**** Unable to open the initial device, quitting.
Unrecoverable error: undefinedfilename in setpagedevice
Operand stack:
    true  --nostringval--  --nostringval--  --nostringval--  --nostringval--  --nostringval--  --nostringval--  --nostringval--  --nostringval--

[编辑:我修正了从 -SOutputFile 到 -sOutputFile 的错字以避免这种红鲱鱼。 (但这就是一些 cmets/answers 所指的。)]

【问题讨论】:

-SOutputFile 不正确,应该是-sOutputFile。因为你没有指定一个输出文件,你得到一个未定义的文件名。不足为奇 :-) 我强烈建议您不要使用 -dPDFSETTINGS,而是单独设置所需的开关。 抱歉打错了。不幸的是,即使使用正确的语法(-sOutputFile),我仍然得到完全相同的错误。 【参考方案1】:

这对我有用...

gs \
   -sDEVICE=pdfwrite \
   -dCompatibilityLevel=1.4 \
   -dPDFSETTINGS=/printer \
   -dNOPAUSE \
   -dQUIET \
   -dBATCH \
   -sOutputFile=output.pdf \
    input.pdf

由-kp-编辑

明确说明(并重申 KenS 在他的评论中所写的内容):

    -SOutputFile=... 不起作用 -sOutputFile=... 是正确的语法。 (Ghostscript 命令行参数区分大小写!)

此外,对于最新版本的 Ghostscript,您现在可以使用 -o output.pdf 而不是长版本。 -o ... 也自动且隐含地设置 -dBATCH -dNOPAUSE 参数。所以写这个命令的最短方法是:

gs                          \
   -sDEVICE=pdfwrite        \
   -dCompatibilityLevel=1.4 \
   -dPDFSETTINGS=/printer   \
   -q                       \
   -o output.pdf            \
    input.pdf

【讨论】:

抱歉打错了。不幸的是,即使使用正确的语法(-sOutputFile),我仍然得到完全相同的错误。 不,OutputFile 继续运行良好。尝试删除 PDFSETTINGS 和 CompatibilityLevel。简而言之,试着缩小问题的范围,直到你发现是什么引起了错误。听起来您由于使用电子书而遇到错误。如果是这样,请将配置设置为与预定义的设置相同,然后将它们一一删除,直到您看到问题为止。 @KenS 我已经尝试删除其他各种位,但只要我有-sOutputFile=output.pdf,就没有任何效果。只要我切换到-o output.pdf,它就可以工作了。 @KenS - 来自发行版。有时间我得再玩一下,看看-sOutputFile有什么问题。 我不得不说,发行版似乎以某种方式破坏了 Ghostscript(几个发行版在打包时对 Ghostscript 进行了更改)。您最好的选择可能是下载源代码并自己构建。您也可以将问题作为错误报告给相关的发行版。我要告诉你的是(从源代码构建)-sOutputFile 在 Linux 上对我来说效果很好。【参考方案2】:

可能是您只是混淆了输入和输出文件名。我以前做过,得到了同样的信息。这很容易做到,因为输出文件命令在输入文件之前。

【讨论】:

以上是关于Ghostscript:“不可恢复的错误:setpagedevice 中的未定义文件名”的主要内容,如果未能解决你的问题,请参考以下文章

python ghostscript:RuntimeError:找不到Ghostscript库(libgs)

Ghostscript颜色检测

PS转PDF。 GhostScript 异常 - 无法初始化 Ghostscript 解释器。错误代码是-100

如何使用 Ghostscript 和 Ghostscript .NET 通过嵌入 IIC 配置文件生成正确的 PDF/A

使用 GhostScript 打印 PDF

AttributeError:“Ghostscript”对象没有属性“_instance”