ghostscript ps2ps 裁剪文档添加一些边距/边框

ghostscript ps2ps crops document adding some margins/ borders

我觉得这个有点菜鸟......但它来了:

让我们使用带有 PS 导出器的 Vector 程序 (没有字体子设置:将来动态更改文本很重要) 更具体地说是 Inkscape 版本 0.46 . 文档大小为 A4,让我们画一些非常靠近边框的线条和一个简单的文本,然后将 ps 导出为 noborder.ps:

真的一切都很好!后记文件的第一行是什么?

%!PS-Adobe-3.0
%%Creator: 0.46
%%Pages: 1
%%Orientation: Portrait
%%BoundingBox: 0 0 596 842
%%HiResBoundingBox: 0 0 596 842
%%DocumentMedia: plain 596 842 0 () ()
%%EndComments
%%Page: 1 1

现在我们需要从这个PS文件生成一个PS文件(为什么?一些无法上传到打印机的新字体和动态文本被更改。PS2PS 是在打印前嵌入字体和其他元素的不错选择)。让我们使用 ghostscript 8.7 中的 ps2ps。

user@server:/$ ps2ps noborder.ps whyborder.ps

很好! 运行 上没有错误...但是...什么?边界?保证金?裁剪?

让我们看看 whyborder.ps header:

%!PS-Adobe-3.0
%%Pages: (atend)
%%BoundingBox: 5 6 587 792
%%HiResBoundingBox: 5.000000 6.791406 586.732813 792.000000
%.........................................
%%Creator: GPL Ghostscript 870 (pswrite)
%%CreationDate: 2015/09/09 16:09:24
%%DocumentData: Clean7Bit
%%LanguageLevel: 2
%%EndComments
%%BeginProlog
% This copyright applies to everything between here and the %%EndProlog:

为什么 BoundingBox 变了???为什么要添加边框、边距、裁剪? 我已经测试了诸如“-dEPScrop”、papersize 之类的选项...但是裁剪​​仍然存在...为什么???

首先,停止使用旧版本的Ghostscript! 8.70 现在已经 6 岁了,当前版本是 9.16(即将被 9.18 取代)。

其次,这样实验时不要使用脚本,直接使用命令行。 GHostscript 的旧版本中使用的设备是 pswrite,这是一个非常糟糕的实现,仅支持 1 级输出。当前代码使用 ps2write 设备,这是一个更强大和灵活的解决方案。

请注意,在所有情况下 运行 通过 Ghostscript 的输入都不是 'embed fonts' 或 'edit' 或 'compress' 原始输入。发生的情况是您的输入被解释为生成图形基元,这些基元被馈送到设备 API,然后相关设备处理这些基元。对于渲染设备,这意味着调用图形库将图元渲染到 canvas。对于高级设备,这意味着重新发出原语,例如作为 PDF 操作。

ANY 这样的处理带来了固有的近似风险,pswrite 设备更糟,因为很多内容都被渲染成图像。所以一般来说它真的不嵌入新字体,它只是嵌入字形的图片。这种缩放真的很糟糕,因为边界框取决于分辨率会导致严重的不准确。

除非别无选择,否则你真的应该避免这样做。如果您真的必须这样做,请准备好接受妥协,不要使用过时的 Ghostscript 版本,也不要使用蹩脚的旧 pswrite 设备。

谢谢 KenS;

通过将 ghostscript 升级到版本 9.16 并使用以下命令一切正常:

user@server:/$ ps2ps -sPAPERSIZE=a4 noborder.ps whyborder916.ps

这是一个古老而稳定的系统 (PHP/Bash/Ghostscript/CUPS),作为工厂标签系统使用多年,也使用旧的 postscript 打印机。最近需要更改字体样式; ps2ps 是 "embed" 不需要随生产线和包装动态变化的字形和条形码 (后记语言) 的最佳选择更换打印机 (不同制造商的不同型号)。由于 PostScript 是一种多年来变化不大的语言,我从未想过要更改 GS 版本。

在这一点上,这是一个真正的省钱!再次感谢!