Ghostscript 设置 - 将任何 jpg 转换为 pdf 时出错

Posted

技术标签:

【中文标题】Ghostscript 设置 - 将任何 jpg 转换为 pdf 时出错【英文标题】:Ghostscript setup - error converting any jpg to pdf 【发布时间】:2020-05-06 15:22:59 【问题描述】:

我正在尝试在 Windows 10 机器上使用 Ghostscript v9.52,但是当我尝试将任何 jpg 文件转换为 pdf 时,我得到一个空白 pdf 和此错误:

Error: /undefined in Test-JPG.jpg
Operand stack:

Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--
Dictionary stack:
   --dict:738/1123(ro)(G)--   --dict:0/20(G)--   --dict:78/200(L)--
Current allocation mode is local
GPL Ghostscript 9.52: Unrecoverable error, exit code 1

我尝试了以下命令:

C:\Users\Work\Desktop>gswin64c -sDEVICE=pdfwrite -o myFile.pdf "C:\Program Files\gs\gs9.52\lib\viewjpeg.ps" -c Test-JPG.jpg viewJPEG
C:\Users\Work\Desktop>gswin64c -sDEVICE=pdfwrite -o out.pdf viewjpeg.ps -c "Test-JPG.jpg viewJPEG" -f 
C:\Users\Work\Desktop>gswin64c -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=output.pdf Test-JPG.jpg

到目前为止我已经尝试过:

尝试使用 ghostscript 合并两个 PDF 文件 - 没有问题,因此 Ghostscript 在某种程度上可以工作。 尝试了不同的 JPG 文件 - 都出现相同的错误 尝试在其他 Windows 程序中打开 JPG 文件 - 没有问题,因此文件本身应该没有任何问题

我找到的最接近的答案是this question,但是答案是上面的第二个命令,这对我不起作用。鉴于我尝试的所有 jpg 都发生这种情况,我想知道在安装 ghostscript 时是否有什么设置不正确?

【问题讨论】:

【参考方案1】:

Ghostscript 是一个 PostScript 解释器,它还包含一个 PostScript 程序,可以解释 PDF 文件。就这样。它(当前)不直接读取任何图像格式。

不过,PostScript 是一种编程语言,Ghostscript 提供了一些辅助 PostScript 程序,可以读取一些图像格式。

您的第一个命令行运行 viewjpeg,ps 然后执行-c 开关,这会导致命令行被读取为 PostScript 程序,直到下一个-f。 “Test-JPG.jpg viewJPEG”不是有效的 PostScript(在 PostScript 语言或 ViewJPEG.ps 程序中没有称为 Test-JPG.jpg 的运算符或函数),所以它不起作用。

第二个命令行本质上是一样的,只是用“”包裹,所以它也不起作用。它也不提供 viewjpeg.ps 的完全限定路径,因此它可能无法找到 viewjpg.ps。

您的第三个命令行甚至不使用 viewjpeg.ps,因此它会尝试将 JPEG 内容作为 PostScript 读取,不出所料,这也不起作用。

如果您阅读 viewjpeg.ps,它实际上在 cmets 中有一个示例用法:

% Usage example:
%   (jpeg-6/testimg.jpg) viewJPEG

请注意文件名周围的 (),您的命令行中缺少这些。如果你这样做:

gswin64c -sDEVICE=pdfwrite -o myFile.pdf "C:\Program Files\gs\gs9.52\lib\viewjpeg.ps" -c "(Test-JPG.jpg) viewJPEG" -f

那么它可能会起作用。假设所有文件都在正确的位置。

但是,从 9.50 版开始,Ghostscript 的默认行为是 SAFER,而不是 NOSAFER。这意味着不允许 PostScript 程序(如 viewJPEG.ps)从磁盘访问任意文件。

Ghostscript 不遗余力地尝试确保在命令行上指定为输入或输出文件的任何文件允许的,但如果您希望 PostScript 程序读取文件,您可以在这种情况下使用-dNOSAFER 运行是安全的,但我不建议这样做,否则您必须将文件添加到允许的文件读取列表中。

这在文档here 中有解释,向下滚动到 SAFER 以查看它。

【讨论】:

以上是关于Ghostscript 设置 - 将任何 jpg 转换为 pdf 时出错的主要内容,如果未能解决你的问题,请参考以下文章

Ghostscript:将非常小的 eps 升级为大 jpg

使用 ghostscript 将 jpg 列表转换为 pdf

无法使用 ImageMagick 和 GhostScript 将 PDF 转换为 JPG

Ghostscript Tiff / JPG 质量

GhostScript - 从 pdf 转换为 jpg 后文本错位

奇怪的问题——PHP / ImageMagick / Ghostscript