缓慢的ghostscript转换和使用大ps文件的慢速打印

时间:2014-02-17 16:16:33

标签: performance pdf printing ghostscript postscript

我有一个生产pdf文件的服务。我有PS兼容的打印机。为了打印pdf文件,我使用ghostscript将它们转换为ps,将它们复制到共享(windows)打印队列。大多数pdf文件只包含几页(< 10)并且不会造成任何麻烦。

我不时要打印大型文件(100 +,500 +,5000 +)页面,我会观察以下内容:

    对于前几页,
  • 转换为ps的速度很快,然后慢下来。进度越大,单个页面的时间就越长。
  • 转换后,复制到打印队列可以正常工作
  • 当复制完成并将文档发送到打印机时,我观察到的现象大致相同:进度越远,转移越慢。

以下是我将pdf转换为ps的方法:

"C:\Program Files\gs\gs9.07\bin\gswin64c.exe" \
-dSAFER -dNOPAUSE -DBATCH \
-sOutputFile=D:\temp\testGS\test.ps \
-sDEVICE=ps2write \
D:\temp\testGS\test.pdf

转换完成后,我只需将其复制到打印队列

即可
copy /B test.ps \\printserever\myPSQueue

我有什么方法可以用这种方式打印大文件?

我的第一个想法是做以下事情:

"C:\Program Files\gs\gs9.07\bin\gswin64c.exe" \
-dSAFER -dNOPAUSE -DBATCH \
-sOutputFile=D:\temp\testGS\test%05d.ps \
-sDEVICE=ps2write \
D:\temp\testGS\test.pdf

当我将每个页面作为自己的ps文件复制到打印机时,使用单个页面可以加快转换速度,在每个页面后不会减慢速度,并且打印速度也很快。但是我迟早会遇到一个问题:当我复制单个ps文件时,它们将是单个打印作业。即使按正确的顺序排序,如果其他人在同一台打印机之间启动打印作业,打印也会混淆。

另一个想法是使用gsPrint,它工作速度相当快,但是使用gsPrint我需要在本地安装打印机,这在我的环境中无法管理,在不同位置有300多台打印机。

任何人都可以准确地告诉我,会发生什么?这是一种糟糕的印刷方式吗?是否有任何建议如何解决在这样的环境中打印此类文档的任务?

2 个答案:

答案 0 :(得分:1)

我不知道为什么打印机会因为Ghostscript生成PostScript而变得如此慢,但你可能想尝试其他转换器,比如来自Poppler utils的pdftops(我找到了Windows download here因为你似乎在使用Windows)。

答案 1 :(得分:1)

如果没有看到示例PDF文件,很难说明为什么它应该慢慢打印。然而,最可能的解释是PDF正在渲染到图像,可能是因为它包含透明度。

这将导致以设备的默认分辨率(720 dpi)创建的大图像,这几乎肯定高于打印机所需的图像。这意味着花费了大量时间将额外数据传输到打印机,然后打印机中的PostScript解释器必须将其丢弃。

使用gsprint将文件呈现为设备的分辨率,假设此值小于720 dpi,则生成的PostScript将更小,因此需要更少的传输时间,更少的时间在打印机上解压缩,并减少浪费额外数据的时间

速度降低的一个原因是由于ps2write的工作方式,它保留了临时文件中的大部分最终内容,并将主文件从这些文件中重新拼接在一起。它还维护一个交叉引用表,该表随着文件对象的数量而增长。除非您需要文件是连续的,否则可以使用-dFirstPage和-dLastPage选项创建许多打印文件,这样只创建最终打印输出的子集,这可能会提高性能。

请注意,ps2write不会将传入的文件呈现给图像,而gsprint肯定会这样做,从gsprint出现的PostScript只会定义一个大位图。这并不保留颜色(一切都转换为RGB)并且不会将矢量对象保持为矢量,因此它不能很好地缩放。但是....如果你想使用gsprint打印到远程打印机,你可以设置一个虚拟打印机'使用RedMon。您可以让RedMon将输出从端口发送到完全不同的打印机,甚至是远程打印机。因此,您使用gsprint打印到(例如)MyPrinter的本地实例'在RedMon1上:并设置RedMon端口以将打印流捕获到磁盘,然后将PostScript文件发送到另一台PC上的' MyPrinter。虽然我猜这可能不会更快。

我的建议是将ps2write的分辨率设置得更低; -r300应该适用于任何打印机,并且可能更低。分辨率只会影响渲染输出,其他所有内容都保留为矢量,因此可以很好地缩放。一般来说,渲染图像的打印效果一般都会达到打印机的一半。