首先; Ghostscript 中操作数的顺序很重要,它们以命令行顺序应用。因此,您需要在应用-dFIXEDMEDIA 之前应用-sPAPERSIZE 在 应用-dFIXEDMEDIA 之前应用-dPDFFitPage。
我还建议您直接使用 Ghostscript 而不是使用 ps2pdf 脚本。
如果这仍然对您不起作用,那么您将需要提供一个示例文件来显示问题,我无法通过查看图片来告诉您任何事情。
您还应该说明正在使用的操作系统和 Ghostscript 版本。
编辑
问题在于您的 PostScript 程序不请求媒体大小,它只是利用当时碰巧可用的任何媒体。有些程序会重新调整其内容以适应当前可用的任何媒体,这不是其中之一。任何不在当前媒体上的东西都可以被剪掉。
“FitPage”代码依赖于请求媒体尺寸的 PostScript 程序,然后将其与当前(固定)尺寸进行比较。从中可以计算出要扩展多少内容以适应新媒体。
如果您的程序不要求媒体大小,则 Ghostscript 无法知道将其缩放到多少以使其适合。
现在您的程序确实有 BoundingBox cmets,但这些只是 cmets,PostScript 使用者会忽略它们。但是你可以使用它们.....
您可以修改 PostScript 程序的标头以假装它是 EPS 而不是 PostScirpt 程序。 :
改变
%!PS-Adobe-2.0
到
%!PS-Adobe-2.0 EPSF-3.0
然后使用-dEPSFitPage 而不是-dPDFFitPage 然后它会产生(我认为)你想要的东西。请注意, PDFFitPage 用于 PDF 输入,因此您不应该真的使用它。对于 PostScript 输入,您需要 -dPSFitPage
或者,阅读 BoundingBox cmets 并自己应用媒体大小请求和原点转换。
这个命令:
gs -sPAPERSIZE=a4 -dFIXEDMEDIA -dPSFitPage -sDEVICE=pdfwrite -sOutputFile=\temp\out.pdf -c "<</PageSize [968 1184]>> setpagedevice -20 -50 translate" -f d:\temp\ori.eps
产生与 EPS 处理文件相同的输出。