在不尝试打印的情况下验证 Postscript?

Posted

技术标签:

【中文标题】在不尝试打印的情况下验证 Postscript?【英文标题】:Validating a Postscript without trying to print it? 【发布时间】:2008-11-03 08:30:54 【问题描述】:

在我的应用程序中将数据保存到 Postscript 会生成一个 Postscript 文件,我可以在 GhostView 中毫无问题地查看该文件,但是当我尝试打印它时,打印机无法打印它,因为它似乎无效。

有没有一种方法可以验证/查找 Postscript 文件中的错误,而无需实际将其发送到打印机?首选是某种 Java API/库,但执行相同操作的程序也可以。


编辑#1:不,我不知道它为什么无效,甚至不一定是无效的,但希望能够在 ghostview 之外验证它,或者弄清楚发生了什么当它无法打印时。


答案:好吧,使用 ps2ps 技巧,我能够看到 Postscript 所做的输出,并在那里检查差异。不同之处在于我不允许在 Postscript 中为图像的宽度或高度使用十进制数,而只能使用整数。所以我仍然没有找到验证的方法,但是这种方法对我的问题来说已经足够好了。谢谢。

【问题讨论】:

【参考方案1】:

每当我需要使用 Ghostscript 验证 PostScript 文件而无需实际查看其呈现的页面图像时,我都会使用“nullpage”设备:

gswin32c ^
   -sDEVICE=nullpage ^
   -dNOPAUSE ^
   -dBATCH ^
   c:/path/to/file/to/be/validated.pdf-or-ps ^
   1>validated.stdout ^
   2>validated.stderr

如果出现问题,将会有一个非零的%errorlevel% 集,validated.stderr 日志文件将包含 Ghostscript 在渲染过程中吐出的所有消息。

【讨论】:

【参考方案2】:

你知道为什么无效吗?

我的建议是将其提供给 Ghostscript/Ghostvoiew,但鉴于 Ghostview 可以查看它,似乎至少有一些解释者认为它是有效的 Postscript。

所以它可能是特定于您的打印机的东西 - 要么它对 Ghostscript 允许的 PS 中的某些东西挑剔,要么它正在访问您的打印机(可能是文件系统)上不存在的东西,或者超出了某些内存限制,或者...

关键是它可能不是一个错误的 PS 程序,因此验证它的库/API 可能无济于事

编辑:是否有任何打印?您是否尝试过来自不同制造商(或 Postscript 解释器供应商,无论如何)的打印机。 Ghostview 是否提供/记录任何警告或错误?

文档来自哪里(什么应用程序)?

你能生成文档的其他实例吗? (例如,一个非常简单/空的,看看是否也会出错)

除非有一个 API 可以访问您的打印机中使用的特定解释器,否则我认为您正在针对另一个 PS 解释器 (Ghostscript) 对其进行验证。

由于世界上没有那么多 PS 克隆,要访问另一个基于非 GS 的克隆可能并不容易

Edit2:此链接(如果信息很旧)提供了有关如何从打印机获取有关错误的更多详细信息的信息:http://www.quite.com/ps/errors.htm

【讨论】:

【参考方案3】:

如果在ghostview上能看到,说明ghostscript可以解析。

因此,您可以尝试使用一个技巧来打印(但不实际验证)您的文件是使用 ghostscript 的 postscript 输出模式(有一个名为 ps2ps 的包装器,主要添加 -sDEVICE=pswrite;也是ps2ps2,它使用-sDEVICE=ps2write)。

【讨论】:

以上是关于在不尝试打印的情况下验证 Postscript?的主要内容,如果未能解决你的问题,请参考以下文章

Windows 8,打印到 PostScript 打印机到文件

调试:是不是可以在不进入每个堆栈帧的情况下打印 C 代码的所有局部变量(带有值)?

Pandas:如何在不使用 scikit 的情况下进行交叉验证?

在不使用基本身份验证的情况下撤销 Oauth2 令牌

使用 ghostscript 将 Postscript 转换为文本文件

如何在不使用 React Native 中的状态的情况下验证 TextInput 值?