如何使用Ghostscript设置自定义页面大小

27
我已经以600 dpi的分辨率扫描了一些材料,尺寸约为9.36x12.67英寸,并以PostScript(PS)格式准备好。
现在,当我尝试使用Ghostscript(GS)将PS转换为PDF时,输出被剪裁了,我猜想是因为GS的默认页面大小设置为A4。我在这里找到了GS的可用模板:[更新]https://ghostscript.readthedocs.io/en/latest/Use.html#appendix-paper-sizes-known-to-ghostscript,但没有一个与我的PS文件的尺寸非常接近,所以:
我能否指示GS输出自定义大小?如果可以,应该如何操作?
从链接的文档中看来,“-sPAPERSIZE”指令似乎只接受预定义的模板名称。
4个回答

35
你可以使用 -gNNNNxMMMM 来设置所用的页面大小,其中 NNMN 是以 720 dpi(720 像素 == 1 英寸)为单位的宽度像素数,而 MMMM 是以 720 dpi 为单位的高度像素数。
或者,您可以使用 PostScript 点(72 点 == 1 英寸)来设置自定义大小,如下所示:-dDEVICEWIDTHPOINTS=w -dDEVICEHEIGHTPOINTS=h
如果我没记错,9.36 英寸 ≈= 674 点12.67 英寸 ≈= 912 点
您还需要应用 -dPDFFitPage 以适配您的输入到页面上。
因此,您可以使用以下任一选项。
gs                          \
   -o output.pdf            \
   -sDEVICE=pdfwrite        \
   -dDEVICEWIDTHPOINTS=674  \
   -dDEVICEHEIGHTPOINTS=912 \
   -dPDFFitPage             \
    input.ps
或者
gs                   \
   -o output.pdf     \
   -sDEVICE=pdfwrite \
   -r600             \
   -g8112x7596       \
   -dPDFFitPage      \
    input.ps

我认为你想使用“-r720”来设置720 dpi。无论如何,感谢你的回答。 - Dorian
我有一个应用程序,它使用Ghostscriptsharp(C#实现)。它只是一个.dll文件,并没有所有命令行选项(至少我找不到)来自定义页面大小。您有任何想法如何在这个包装器中实现它吗? - Valien
rasterizer.CustomSwitches.Add("-dMySwitch"); - wbt11a

3

我的做法:

gs -sDEVICE=pdfwrite -r720 -g4308x6066 -dPDFFitPage -o out.pdf in.pdf

4308x6066 是像素数,-r720 是每英寸的像素数。

因此,这里我们有720dpi,例如对于5英寸,这将是3600像素。


3

链接已损坏。修复后的链接为:https://www.ghostscript.com/doc/current/Use.htm#Known_paper_sizes - Mugen
谢谢,这对我的问题有所帮助。一个iso-A4格式的ps文件被转换成了Letter格式,而顶部的边距似乎向上移动了。使用"-sPAPERSIZE=a4",感谢提供的链接,我得到了正确的pdf格式。 - Rob

2
我发现即使我已经强制将页面设置为最大标准尺寸A0,gs仍然剪切了我的输出。原因是groff/grops发送给gs的PostScript文档包含一个%%DocumentMedia规范,它覆盖了Ghostscript的选择。解决方法是给groff加上命令行参数-p-P48i,48i-p告诉groff将其余选项传递给grops-P48i,48i将纸张大小设置为48英寸乘以48英寸。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接