Performance 使用大ps文件进行缓慢的重影脚本转换和缓慢打印

Performance 使用大ps文件进行缓慢的重影脚本转换和缓慢打印,performance,pdf,printing,ghostscript,postscript,Performance,Pdf,Printing,Ghostscript,Postscript,我有一个生成pdf文件的服务。我有PS兼容的打印机。为了打印pdf文件,我使用ghostscript将其转换为ps,并将其复制到共享(windows)打印队列。大多数pdf文件只包含几页(我无法解释为什么使用Ghostscript生成的PostScript打印机会变得如此缓慢,但您可能希望尝试其他转换器,例如Poppler utils中的pdftops(我发现了一个问题,因为您似乎正在使用Windows).如果看不到示例PDF文件,很难说为什么打印速度慢。但是最可能的解释是,PDF被渲染为图像,

我有一个生成pdf文件的服务。我有PS兼容的打印机。为了打印pdf文件,我使用ghostscript将其转换为ps,并将其复制到共享(windows)打印队列。大多数pdf文件只包含几页(我无法解释为什么使用Ghostscript生成的PostScript打印机会变得如此缓慢,但您可能希望尝试其他转换器,例如Poppler utils中的
pdftops
(我发现了一个问题,因为您似乎正在使用Windows).

如果看不到示例PDF文件,很难说为什么打印速度慢。但是最可能的解释是,PDF被渲染为图像,可能是因为它包含透明度

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

使用gsprint将文件渲染到设备的分辨率,假设该分辨率小于720dpi,生成的PostScript将更小,因此需要更少的传输时间、更少的打印机解压缩时间以及更少的丢弃额外数据的时间

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

请注意,ps2write不会将传入的文件渲染为图像,而gsprint肯定会渲染,从gsprint生成的PostScript将简单地定义一个大位图。这不会保留颜色(所有内容都将转到RGB)并且不能将向量对象作为向量进行维护,因此无法很好地扩展。但是……如果您想使用gsprint打印到远程打印机,可以使用RedMon设置“虚拟打印机”。您可以让RedMon将输出从端口发送到完全不同的打印机,甚至远程打印机。因此,您可以使用gsprint打印到(例如)RedMon1上的“MyPrinter的本地实例”:并设置RedMon端口以将打印流捕获到磁盘,然后将PostScript文件发送到“另一台电脑上的MyPrinter”。尽管我猜这可能不会更快


我的建议是将ps2write的分辨率设置得更低;-r300对于任何打印机都应该足够了,而且可能更低。分辨率只会影响渲染输出,其他所有内容都保留为矢量,因此可以很好地缩放。渲染图像通常会以打印机分辨率的一半打印得很好。

谢谢您的支持根据您的建议,如果我无法成功使用其他设备,我会尝试一下。使用-sDEVICE=pswrite或-sDEVICE=epswrite性能更好,并且可以开始打印,但在某些打印机型号上(例如Lexmark T650)它仍然比使用gsprint或-sDEVICE=mswinpr2和windows驱动程序慢。如果单页解决方案有效,则可以直接将其重新组合到单个文件中,使其显示为单个作业。如果您想了解这一点,可以将其作为一个新问题提出——您可能需要在文件之间添加一点清理/重置代码。见鬼哦,肯斯,PDF由文本和带有图像的表格组成(小b/w gif)。我无法发布确切的示例,因为我没有任何没有机密数据的示例。使用ps2write进行渲染-r300性能稍好一些,但仍然与ps2write相同,所以真正的大作业不会起作用,至少在我这里的打印机上是如此。pswrite速度快得多,而且可以打印。pxlcolor/pxlmono也可以,但打印是slow在几种打印机型号上(Lexmark T650在3页后速度较慢,Lexmark LEXMX410表现完美)。对我来说,我想我会遵循pswrite/pxl路径。感谢RedMon的建议,这可能会解决我遇到的另一个问题。pswrite已被弃用,并已从Ghostscript发行版中删除。这并不意味着它将不起作用,但您必须自己构建任何较新版本的Ghostscript才能使用它,我们不会接受任何针对它的错误报告。PXL设备使用完全不同的方案,但我怀疑这些基本上是错误图像。我认为ps2write的问题只是它消耗的资源,这是由于代码的体系结构。这不是我选择的编写方式,但我们现在坚持使用它。我确实想到了使用语法'-sOutputFile=out%d.ps',您可以每页创建一个输出文件。因为这些文件符合DSC,所以您可以轻松地复制(或cat)很明显,你必须尝试一下,看看它是否能改善你的情况,我相信它可能会,特别是在物理打印机上的打印速度方面。你好,KenS,我当然不想用已经不推荐的设备设计一个解决方案。我试着每pa创建一个输出文件然后,ge an将它们简单地连接到一个文件中。GSView抱怨文件中有多个%%EOF。但打印机正在打印,性能似乎正常。但我还需要一些测试。
"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