大型postscript打印作业失败

时间:2012-07-26 16:03:59

标签: postscript

我正在开发一个使用postscript打印许多页面的程序。如果我打印几页,一切都正确打印。但是,如果我打印一个大文档,比如说100页,它会在第21页左右停止。它会等待一分钟,然后在下一页上发出错误。我将信息一次一个字符直接发送给打印机,如果这有任何区别的话。如果我在错误发生之前从作业中删除页面,它会打印这些页面,但是会在20道左右的页面中出现另一个错误。我有一个临时修复,它连接到打印机,打印10页,然后关闭连接,并重新开始每10页一个新的连接。这打印一切都很好。传输的数据量刚刚超过一兆,我的打印机有32兆的内存,所以应该有足够的缓冲空间。有时违规命令只是命令的一部分而不是完整的,比如'how'而不是'show'。

该文件位于:https://dl.dropbox.com/u/2430447/SPL0333842

2 个答案:

答案 0 :(得分:1)

感谢您发布导致问题的PostScript语言文件。如果没有看到代码就很难回答像你这样的问题。

您描述的症状是典型的内存耗尽的页面描述。在你的文件中,明显的问题是这一行,它出现在每一页上:     -2 vmreclaim

根据PostScript Language Reference, third edition,第716页,

  

int vmreclaim –   控制 int 指定的垃圾收集机制:   -2禁用本地和全局VM中的自动收集...

“垃圾收集”在这里指的是PostScript解释器重用内存的方式,该方式以前由您的文件使用但不再需要。换句话说,您的文件故意禁用解释器的回收内存机制。因此,首先要尝试删除-2 vmreclaim的所有实例。

还有其他方式,您的文件结构不合适。根据{{​​3}}的建议,它不分为prolog和script。您似乎正在让PostScript解释器执行文本布局,尤其是在过程/Truncate中。您在整个文件中使用特殊注释!PS-Adobe,而不是在文件的开头。

尽管如此,我预计这些问题并没有阻止文件的打印;甚至,在这个快速处理器的时代,放慢速度。停止禁止内存重用,你可能会停止内存不足。

答案 1 :(得分:0)

有些问题:

  1. 您发送的PostScript的创始人是谁?
  2. 目标打印机是否使用PostScript,或打印主机与打印机设备之间是否发生某种转换?
  3. 第21页失败的100页PostScript文件有多大(以字节为单位)?
  4. 您能告诉我们您似乎看到的'违规命令'错误的详细信息吗?!
  5. 您是否可以提供指向示例PostScript文件的链接?
  6. 打印机是如何连接打印主机的? (例如,它是否位于提供网络连接的小型“打印服务器”设备盒后面,而打印机挂断了从设备到打印机的USB连接?)
  7. 你检查了所有的电缆吗?
  8. 以下代码是否打印100页?
    %!PS
    /H1 {/Helvetica findfont 48 scalefont setfont .2 .2 1 setrgbcolor} def
    /pageframe  {1 0 0 setrgbcolor 2 setlinewidth 10 10 575 822 rectstroke} def
    /gopageno {H1 300 700 moveto } def
    1 1 100 {pageframe gopageno
    4 string cvs
    dup stringwidth pop
    -1 mul 0 rmoveto
    show
    showpage} for