保留文件名 Ghostscript

Preserve file name Ghostscript

是否可以转换 PDF 文件并在输出中使用与输入 PDF 相同的名称?

我知道可以通过单独的重命名命令来解决。但我想弄清楚这是否可以用 GS 完成。

现在我可以通过这样做来更改 PDF 版本:

gswin32c -q -dNOPAUSE -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 \
         -sOutputFile=a.pdf -dBATCH b.pdf

但是输入文件和输出文件名必须不同,如果我这样做...

gswin32c -q -dNOPAUSE -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 \
         -sOutputFile=b.pdf -dBATCH b.pdf

...它不起作用。

我假设当文件试图覆盖自身时内部有些东西搞砸了。

有什么方法可以仅使用 Ghostscript 来解决这个问题吗?

不,当您使用 Ghostscript 处理它时,您不能对输入和输出 PDF 使用相同的文件名(除非您对输出使用不同的 目录路径输入)。

在 linux 上,您可以使用缓冲区。我使用 linux 工具 spongemoreutils 的一部分)来实现这一点。

这对我来说可以减小文件大小,例如:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=- big.pdf | sponge big.pdf

一个非常简单的解决方案是强制覆盖原始文件:

gs -sDEVICE=pdfwrite -sOutputFile=temp.pdf file.pdf; mv -f temp.pdf file.pdf

例如,您可以在 exec() 的一行内组合这些指令; PHP.