2012-07-26 52 views
0

我正在使用postscript打印許多頁面的程序。如果我打印幾頁,所有東西都能正確打印。但是,如果我打印一個大文檔,比如說100頁,它會在第21頁左右停下來。它會等待一分鐘,然後在下一頁上輸出一個錯誤。如果這有什麼不同,我會一次將信息直接發送給打印機。如果我在錯誤發生之前從作業中刪除頁面,那麼它會打印出這些頁面,但在路上會出現20頁左右的錯誤。我有一個臨時修補程序,它連接到打印機,打印10頁,然後關閉連接並每10頁重新開始一次連接。這樣打印一切都很好。傳輸的數據量僅超過1兆,我的打印機有32兆內存,所以應該有足夠的緩衝空間。有時候,違規命令只是命令的一部分,並不完整,比如'how'而不是'show'。大筆記打印作業失敗

的文件是在這裏:https://dl.dropbox.com/u/2430447/SPL0333842

回答

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 
    
+0

我自己創建PostScript。如果我改變我的程序來終止與打印機的連接,那麼每10頁重新連接一切正常。另外,如果我選擇僅打印40頁,則所有打印效果都很好。我有一根USB電纜直接從我的電腦連接到打印機。這些文件大約是1.1mb。我會嘗試你的代碼。如果我確實得到了一個有問題的命令,它看起來像命令什麼壞了。就像人會說's',接下來說'如何'或類似的東西。但這取決於我的數據。 – Tim 2012-07-31 19:48:40

+0

該文件位於:https://dl.dropbox.com/u/2430447/SPL0333842 – Tim 2012-07-31 20:23:25

1

感謝您發佈導致問題的PostScript語言文件。沒有看到代碼就很難回答像你這樣的問題。

您描述的症狀是頁面描述的典型情況,其內存不足。在文件中,突出的問題是這條線,其中發生在每一頁上: -2 vmreclaim

按照PostScript Language Reference, third edition,716頁,

INTvmreclaim – 控制垃圾收集機械爲通過INT規定: -2禁用本地和全球的虛擬機自動採集...

「垃圾收集」在這裏指的是PostScript解釋程序的重用內存的方式,該方法之前由您的文件使用但不再需要。換句話說,你的文件是故意禁用解釋器的機制來回收內存。因此,首先要嘗試刪除-2 vmreclaim的所有實例。

還有其他的方式,你的文件結構風格差。根據Document Structuring Conventions的建議,它沒有被分爲序言和腳本。您似乎正在讓PostScript解釋程序執行文本佈局,特別是在程序/Truncate中。您在整個文件中使用特殊註釋!PS-Adobe,而不是在文件的開頭。

不過,我預計這些問題並沒有阻止打印文件;甚至在這個快速處理器的時代,它會讓速度變慢。停止禁止內存重用,並且可能會停止內存不足。