[我正在尝试在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
到目前为止我尝试过的:
否则,我找到的最接近的答案是this question,但是上面的第二个命令对我来说不起作用。鉴于我尝试的所有jpg都发生了这种情况,我想知道是否在安装ghostscript时是否没有正确设置某些内容?
Ghostscript是PostScript解释器,它还集成了将解释PDF文件的PostScript程序。就这样。 (当前)它不直接读取任何图像格式。
但是,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,因此它尝试以PostScript读取JPEG内容,这也就不足为奇了。
如果您阅读viewjpeg.ps,它实际上在注释中有一个示例用法:
% 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竭尽全力以确保允许在命令行上指定为输入或输出文件的任何文件are,但是如果要PostScript程序读取文件,则必须使用[ C0]在这种情况下是安全的,但我不建议这样做,否则您必须将文件添加到允许的文件读取列表中。
这在文档-dNOSAFER
中有解释,向下滚动到SAFER以查看它。