"Error: /undefined in --.endpage--" with foomatic-rip
Alex Taylor
mail.me at reply.to.address
Sun Sep 12 05:05:53 PDT 2010
Sorry for the rather lengthy post, but I could really use some help
with this porting problem, and I figured too much information is better
than too little...
I'm helping with the OS/2 port of CUPS. At present, I'm trying to get
working a number of Japanese-model (mostly Epson) laser printers which
use foomatic-rip.
First, a quick summary of how CUPS works under OS/2. Normal OS/2
applications can only print to an OS/2 print queue. Every OS/2 print
queue has associated with it (A) a print driver (which generates the
native-format print data), and (B) a "port driver" (like a backend)
which is responsible for sending that data to the printer. With CUPS,
for (A) we use an OS/2 PostScript print driver (our own build, but
mostly based on IBM's code) so that the generated print job is a PS
file. For (B) we use a special port driver that we've written which
waits until the PostScript job file is fully generated, and then runs
CUPS lpr on it (so it gets passed to cupsd, which takes it over from
there).
The port driver makes one minor modification to the PS file: it always
adds the first line "%!PS-Adobe-3.0" to work around certain problems
(such as the fact that the PostScript driver generates the header
"%!PS-Adobe" instead, which I believe is technically incorrect according
to the DSC).
The problem I'm having is this: when printing to a printer which uses
foomatic-rip to print via GhostScript, the job is always truncated just
before the end (so the last few bytes are cut off).
This is the error output that I get (in this particular instance,
printing to an Epson LP-9400):
Closing renderer
Error: /undefined in --.endpage--
Operand stack:
0 true 1 (PAGE: )
Execution stack:
%interp_exit .runexec2 --nostringval-- --nostringval--
--nostringval-- 2 %stopped_push --nostringval-- --nostringval--
--nostringval-- false 1 %stopped_push 1846 1 3 %oparray_pop
1845 1 3 %oparray_pop 1829 1 3 %oparray_pop 1723 1 3
%oparray_pop --nostringval-- %errorexec_pop .runexec2
--nostringval-- --nostringval-- --nostringval-- 2 %stopped_push
--nostringval-- 1729 0 3 %oparray_pop --nostringval-- 1809
1 3 %oparray_pop --nostringval-- 4 --nostringval--
Dictionary stack:
--dict:1154/1684(ro)(G)-- --dict:1/20(G)-- --dict:80/200(L)--
Current allocation mode is local
Now, this ONLY happens when the PostScript job file was passed through
our CUPS port driver; if I set the OS/2 print queue to output to file
only, and then print that file manually (using CUP lpr), then it prints
fine.
Normally, I'd say this points to a bug in our port driver (or at least
in the PS data that comes out of it)... and that may turn out to be the
case. However, if I take the same output file, and print it from, say,
an Ubuntu Linux box, it prints perfectly well.
This archive contains two instances of the same printed document:
http://users.socis.ca/~ataylo00/input_ps_files.zip (~380 kB)
"blue_good.ps" was generated by printing directly to file; as noted
above, it prints correctly. "blue_bad.ps" was generated by printing to
the CUPS printer through our port driver, then saving the generated
spooler file; this file exhibits the truncation error.
(Feel free to try the recipe, BTW. It's really good. <g>)
Now here's the weird thing. If I edit "blue_bad.ps" and DELETE the
line "%!PS-Adobe-3.0" from the top (or change it to simply "%!PS-Adobe"),
then all of a sudden the file will print correctly! I _think_ this is
because not having the correct PS header will cause foomatic-rip to skip
over the first section, which I guess must result in the error (whatever
it is) being bypassed somehow. (This is presumably the same reason why
"blue_good.ps" prints correctly -- because it lacks this header.)
At the end of the day, I don't know whether it's the PostScript data
that is invalid somehow, or if there's a bug in our port of foomatic
(or of GhostScript), or if it's some odd combination of the two. Since
I don't really know much about the PostScript language, I can't really
say. (That's also one reason I'm posting here instead of on the
foomatic list.)
I turned on foomatic-rip debug logging and compared the output from
these two files.
http://users.socis.ca/~ataylo00/foomatic_output_files.zip (~385 kB)
This archive contains the logfiles and the final foomatic-generated PS
data files from both the "good" and "bad" jobs.
I wonder if anyone could provide further insights on this problem?
Thanks...
--
Alex Taylor
Fukushima, Japan
http://www.socis.ca/~ataylo00
Please take off hat when replying.
More information about the cups
mailing list