Subject: 2 Printers Subject: 2.1 How can I get my printer to talk back to me? Experts using a level 2 printer can use the SerialOff.PS and SerialEHandlder.ps programs to communicate bidirectionally to the printer. If you just need the error returns from the printer, you can spawn a cat < port >> logfile& in your system startup. Then you will get a log of everything the printer says. This works on any serial-port connected printer. Subject: 2.2 Should I leave my printer on? The consensus seems to be that most computer equipment lasts longer if left on. This presents less thermal stress to the components. Subject: 2.3 How do I suppress the power-on start page? Disabling the start page is described in your printer's PostScript supplement. The most common sequence is ``serverdict begin 0 exitserver statusdict begin false setdostartpage end''. Subject: 2.4 How do I make a downloaded font ``persistent''? %!PS-Adobe-2.0 ExitServer %%BeginExitServer: 0 serverdict begin 0 exitserver %%EndExitServer % Test for existence of font, abort if present. % This won't work on a printer with a hard disk! /str 32 string def /Eurostile dup FontDirectory exch known { str cvs print ( is already loaded!\n) print flush quit } { (loading font ) print str cvs print (\n) print flush } ifelse %% Font follows... The part following ``%%EndExitServer'' is optional. If you use it, change Eurostile to the name of the font. The default PFA behavior is to use up additional VM for the new copy if another copy has already been downloaded. Subject: 2.5 How do I remove a persistent (``permanent'') downloaded font? In PostScript Level 2, you can use the undefinefont operator to remove fonts selectively. The only reliable method in PostScript Level 1 is to restart the printer, for example with: serverdict begin 0 exitserver systemdict /quit get exec Of course, the real solution is just to not download persistent fonts unless you really want them to persist indefinitely. If you want them only for one job, download them as part of the job. Subject: 2.6 How do I reset the printer without power-cycling? Most printers can be reset by issuing ``serverdict begin 0 exitserver systemdict /quit get exec''. Subject: 2.7 About saving files Adobe recommends that driver writers do not put EOT (control-D) into files when saving to disk. Normally, the EOT is a part of the protocol for parallel and serial ports and never hits the PostScript interpreter. Drivers that do embed EOD can create problems for devices that allow other communication methods (e.g. AppleTalk, Ethernet, and SCSI) where the EOT is not part of the communications protocol. It is useful to redefine EOT in these instances so that the interpreter does not generate an error. The recommended redefinition is: (\004) cvn {} def This should convert any stand-alone embedded EOTs into a null procedure. Subject: 2.8 What's the control-D business? PostScript printers communicating over serial lines use control-D as an end of job indicator. The host computer should then wait for the printer to send a control-D back to indicate that the job has finished. Managing the serial protocol between host and printer should be done by some form of print service, but if you're unsure whether your print service is doing it, it's an idea to send one yourself. PC type computers frequently do not have any kind of printer manager and applications end up sending control-D characters to the printer, sometimes before and after a job. PC applications frequently embed a control-D as the first character in the print file, presumably to flush out any other jobs, and thereby breaking the Adobe Document Structuring Conventions. If you want to prevent applications from doing this, you could use a spooler which would look at the end of every outgoing file and drop the control-D on the end if there happened to be one. If you want a spooler, check out lprps. Subject: 2.9 Why does the printer say ``still busy'' when my document is done printing? Sometimes when you finish a print job, the printer ``Ready'' light keeps flashing for a minute or so. Somehow, the printer has received some character(s) after the control-D which was sent immediately after the PostScript file. The most common is that a newline has been inserted after the control-D. The printer took these character(s) to be another program, and eventually timed-out while waiting for the rest of it. This can happen because of the host not waiting for the printer to finish. Subject: 2.10 How should I set up my spoolers? Since PostScript usually is prefixed with ``%!'', it's easy to educate your spooler to autoselect between passing raw PostScript through to the printer or doing an ``ASCII-to-PostScript'' conversion first. There are many packages that will do this, including Transcript and psxlate. Unfortunately, many PostScript applications generate PostScript without a proper ``%!'' magic cookie. The spooler should be responsible for transmitting the ``job termination code'' (a control-D on serially-connected printers) to the printer, not the application. Do yourself a favor and disable (or filter out) control-Ds in your applications and generate them in the spooler. This will be far more reliable in the face of arbitrary input. Subject: 2.11 What are PPD files? Adobe Postscript Printer Description (PPD) files describe how to use the special features for a specific Postscript printer. They are suppose to be human-readable, but they are really only readable by PostScript gurus. It is the responsibility of the printer manufacturer to supply PPD files. However, the Adobe mail server has many of them. (see the Section 6, ``About Adobe'') Subject: 2.12 What's a timeout error? Paul Balyoz has this to say about timeout errors: A timeout error means the the printer has decided to abort the print job because one of its internal timers ran out. There are three standard timers configured in a PostScript printer. These are documented in appendix D of the Red Book*, but here's more detail: job timeout The maximum time a single print job is allowed to run, in seconds. If it doesn't finish in this amount of time, it is aborted, and the current page has a "timeout" error printed on it. The rest of the job is thrown away, like with most PostScript errors. manual feed timeout The amount of time the printer will wait for someone to manual-feed a sheet of paper (or envelope) before giving up and aborting the print job, in seconds. wait timeout The amount of time the printer will wait after it stops receiving a flow of PostScript from the host before aborting the print job, in seconds. The idea here is, "if the print job is still running even though we haven't seen any new data for a long time, then there may be a problem like an infinite- loop, so let's stop the job." We have two HP Laserjet III printers with the PostScript cards installed (Level 1 PostScript). This printer has an 8 ppm print engine with moderately slow PostScript (in my opinion). For a long time we have had problems with large print jobs timing out. Documents longer than about 9 pages would never come out without some kind of timeout error every time. Single page graphics such as screen snapshots would even fail from time to time! I knew it wasn't a hardware failure, because both of our printers would do it all the time. Calls to HP technical flow-control and tried direct-connecting the printer, no improvement. The actual solution was to change the timeout values to: 0 60 0 In other words, no job timeout, and no wait timeout. The concept of these timeouts makes no sense when you realize that a single ordinary job could take a long time to print. I have a 1-page graphic that takes >5 minutes of thinking time once it is sent to the printer! If the printer is working and there's nothing wrong with the job, why should it be aborted? The wait timeout makes even less sense than the job timeout. PostScript is a programming language, for goodness sake. A legal print job that takes 10 seconds to send to the printer at 9600 baud could generate 100 pages or more of full-page output, if it needed too. That's going to take some time to print, but it took very little time to transfer. Why require the computer to "keep sending stuff", just so the job can complete? And of course the reverse. Hugely complex drawings that compute for a long time in the printer before ejecting even the first page. An example of this would be a poster-sized drawing that's being printed on ordinary paper, so that you can cut and paste with scissors and tape to put it together. The usual way of doing this is drawing the ENTIRE poster on each page of paper, and letting the clipping algorithm remove the parts that won't fit on the page. Then just reposition the origin for each page to get a different portion of the big drawing on each page. Faster PostScript print systems would help here, but only up to a point. People usually want any size printout to work on their printer, even if it has to take a long time. We have one faculty person here who regularly prints things overnight, because it takes about 4-6 hours (!) to print his whole document (10 - 20 pages). All of these timeouts can be configured in the printer by talking to it directly. There are two ways to change parameters: just for the current print job, and as the default for all future print jobs. The default settings stay set in the printer even during power off; the printer usually has some kind of non-volatile memory (probably RAM memory with a battery for power). Please see the Red Book for details on changing these parameters (look for "setjobtimeout" and "setdefaulttimeouts").