在不尝试打印的情况下验证 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 的情况下进行交叉验证?