后记为 PDF 缩放以适合 A4
Postscript to PDF scale to fit into A4
我需要通过将这个 13.44x16.44 英寸的 Postscript 文件放入页面来创建一个 A4 PDF 文件。我以为 ps2pdf
可以帮助我,但我无法达到预期的效果。
我使用此命令创建 PDF:
ps2pdf -dFIXEDMEDIA -dPDFFitPage -sPAPERSIZE=a4 ori.postscript salida.pdf
请注意,我使用 -dFIXEDMEDIA
和 -dPDFFitPage
强制将 Postscript 文件放入 A4 纸张大小,但这些显然不起作用。
这是原始文件:
这是生成的文件。如您所见,图片没有调整大小以适合,而是按原样放置:
首先; Ghostscript 中操作数的顺序很重要,它们按命令行顺序应用。因此,您可能希望在应用 -dFIXEDMEDIA
之前应用 -sPAPERSIZE
在应用 -dFIXEDMEDIA
之前应用 -sPAPERSIZE
,在应用 -dPDFFitPage
.
之前应用这两个应用
我还建议您直接使用 Ghostscript 而不是使用 ps2pdf 脚本。
如果仍然不能解决问题,那么您需要提供一个示例文件来说明问题,我无法通过查看图片告诉您任何信息。
您还应该说明所使用的操作系统和 Ghostscript 版本。
编辑
问题是您的 PostScript 程序不请求媒体大小,它只是利用当时可用的任何媒体。有些程序会重新调整其内容以适应当前可用的任何媒体,这不是其中之一。任何不在当前媒体上的内容都可以被剪掉。
'FitPage' 代码依赖于请求媒体大小的 PostScript 程序,然后将其与当前(固定)大小进行比较。从中可以计算出内容的缩放比例,使其适合新媒体。
如果您的程序不请求媒体大小,那么 Ghostscript 就无法知道要将其缩放多少才能适合。
现在您的程序确实有 BoundingBox 注释,但那些只是注释,PostScript 使用者会忽略它们。但是你可以使用它们.....
您可以修改 PostScript 程序的 header 以假装它是 EPS 而不是 PostScirpt 程序。 :
改变
%!PS-Adobe-2.0
到
%!PS-Adobe-2.0 EPSF-3.0
然后使用 -dEPSFitPage
而不是 -dPDFFitPage
然后它会产生你想要的东西(我认为)。请注意,PDFFitPage 用于 PDF 输入,因此无论如何您都不应该真正使用它。对于 PostScript 输入,您需要 -dPSFitPage
或者,阅读 BoundingBox 评论并自己应用媒体大小请求和来源翻译。
这个命令:
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 处理文件相同的输出。
我需要通过将这个 13.44x16.44 英寸的 Postscript 文件放入页面来创建一个 A4 PDF 文件。我以为 ps2pdf
可以帮助我,但我无法达到预期的效果。
我使用此命令创建 PDF:
ps2pdf -dFIXEDMEDIA -dPDFFitPage -sPAPERSIZE=a4 ori.postscript salida.pdf
请注意,我使用 -dFIXEDMEDIA
和 -dPDFFitPage
强制将 Postscript 文件放入 A4 纸张大小,但这些显然不起作用。
这是原始文件:
这是生成的文件。如您所见,图片没有调整大小以适合,而是按原样放置:
首先; Ghostscript 中操作数的顺序很重要,它们按命令行顺序应用。因此,您可能希望在应用 -dFIXEDMEDIA
之前应用 -sPAPERSIZE
在应用 -dFIXEDMEDIA
之前应用 -sPAPERSIZE
,在应用 -dPDFFitPage
.
我还建议您直接使用 Ghostscript 而不是使用 ps2pdf 脚本。
如果仍然不能解决问题,那么您需要提供一个示例文件来说明问题,我无法通过查看图片告诉您任何信息。
您还应该说明所使用的操作系统和 Ghostscript 版本。
编辑
问题是您的 PostScript 程序不请求媒体大小,它只是利用当时可用的任何媒体。有些程序会重新调整其内容以适应当前可用的任何媒体,这不是其中之一。任何不在当前媒体上的内容都可以被剪掉。
'FitPage' 代码依赖于请求媒体大小的 PostScript 程序,然后将其与当前(固定)大小进行比较。从中可以计算出内容的缩放比例,使其适合新媒体。
如果您的程序不请求媒体大小,那么 Ghostscript 就无法知道要将其缩放多少才能适合。
现在您的程序确实有 BoundingBox 注释,但那些只是注释,PostScript 使用者会忽略它们。但是你可以使用它们.....
您可以修改 PostScript 程序的 header 以假装它是 EPS 而不是 PostScirpt 程序。 :
改变
%!PS-Adobe-2.0
到
%!PS-Adobe-2.0 EPSF-3.0
然后使用 -dEPSFitPage
而不是 -dPDFFitPage
然后它会产生你想要的东西(我认为)。请注意,PDFFitPage 用于 PDF 输入,因此无论如何您都不应该真正使用它。对于 PostScript 输入,您需要 -dPSFitPage
或者,阅读 BoundingBox 评论并自己应用媒体大小请求和来源翻译。
这个命令:
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 处理文件相同的输出。