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