Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ps2pdf-无法打开初始设备_Pdf_Ghostscript - Fatal编程技术网

ps2pdf-无法打开初始设备

ps2pdf-无法打开初始设备,pdf,ghostscript,Pdf,Ghostscript,我使用LaTeX和lualatex编译器构建了一个相当大的PDF(我需要它是因为特定的字体),现在我想按照指令用ps2pdf收缩PDF(投票数第二高的答案,因为gs在我的计算机上不被识别为命令行工具)。我的命令如下所示: ps2pdf -dPDFSETTINGS=/ebook -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -q -sOutputFile=output.pdf input.pdf 我收到以下错误消息: MiKTeX GPL Ghostscr

我使用LaTeX和
lualatex
编译器构建了一个相当大的PDF(我需要它是因为特定的字体),现在我想按照指令用
ps2pdf
收缩PDF(投票数第二高的答案,因为
gs
在我的计算机上不被识别为命令行工具)。我的命令如下所示:

ps2pdf -dPDFSETTINGS=/ebook -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -q -sOutputFile=output.pdf input.pdf
我收到以下错误消息:

MiKTeX GPL Ghostscript 9.25: Device 'pdfwrite' requires an output file but no file was specified.
**** Unable to open the initial device, quitting.

我确定该文件存在,我尝试使用as
*.ps
文件作为输入,给出了完整路径,有双引号和无双引号(Windows系统),但没有任何效果。奇怪的是,仅仅运行
ps2pdf output.pdf input.ps
就可以工作,但会生成更大的pdf。我缺少什么?

无法打开的文件是输出文件,因此如果它存在,那将是一个潜在问题。如果“其他东西”打开了输出文件,则无法写入该文件

你似乎正在运行一个非标准版本的Ghostscript,从启动横幅判断,如果我是你,我会安装并使用标准版本的Ghostscript,即使你必须自己构建它

奇怪的是,“ps2pdf”只是一个运行Ghostscript的脚本,而简单的“gs”则不行。我个人不会使用这个脚本。尝试找到Ghostscript可执行文件并直接运行

我也会放弃-q(安静)开关,至少在试图解决问题时,抑制消息可能会隐藏一些有用的东西

哦,我看你实际上是在起诉Windows。Windows上的可执行文件不称为“gs”,它称为gswin,后跟32或64表示字长,如果是命令lin(与窗口化版本相反),则为c。所以您需要gswin32、gswin32 C、gswin64或gswin64c中的一个。请注意,Ghostscript安装程序不会将安装目录添加到$PATH环境变量,因此,如果您只打开Windows命令shell并键入“gswin32c”,将找不到它。您需要将isntall目录添加到$PATH或提供可执行文件的完整路径


我个人会使用普通的Windows二进制文件,而不是在MingW或任何您正在使用的Linux shell下提供的修改版本。如果目录不可用或对shell是只读的,这可能会导致写入输出文件时出现问题。

谢谢,我找到了可执行文件并将其添加到
$PATH
环境中。当我现在运行它时,它会提示我使用
Page 1
,然后是
>>showpage,按继续您需要在提示处输入'quit'。直到Ghostscript退出,PDF文件才被完全写入。您可以通过使用“-o output.pdf”而不是“-sOutputFile=output.pdf”或通过在现有命令行中添加“-dBATCH-dNOPAUSE”来避免这种情况。很好,成功了!现在只有一件事:我所有的内部链接在转换后都被破坏了。有什么办法可以保存它们吗?我不能在没有看到PDF文件的情况下对“内部链接”进行评论,因为这种描述可以涵盖很多不同的PDF结构。其余的请看我的评论。请注意,Ghostscript不会“压缩”、“优化”或“减少”PDF文件。它所做的是获取一个输入(PostScript、PDF、XPS、PCL、PXL),并在选择pdfwrite设备时从中生成一个PDF文件。文件可能更小,特别是如果使用降采样图像之类的东西,但这不是目的。每次你像这样“处理”一个PDF文件,你就有可能失去它的忠实度。至于“内部链接”,我指的是“参见图1”或目录之类的参考资料。在原始pdf中,工作非常好,在输出文件中,它们刚刚消失。