File: foo2zjs.html.in

package info (click to toggle)
foo2zjs 20050217-1
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 3,364 kB
  • ctags: 2,122
  • sloc: ansic: 15,074; xml: 1,751; makefile: 503; sh: 269; perl: 102
file content (315 lines) | stat: -rw-r--r-- 12,159 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
<html>
<head>
<title>foo2zjs: a linux printer driver for ZjStream protocol</title>
<link REL=STYLESHEET TYPE="text/css" HREF="style.css">
</head>
<body>

<font SIZE="+1"><b>foo2zjs: a linux printer driver for ZjStream protocol
(e.g. Minolta magicolor 2300 DL)
</b></font><br>
<p><font SIZE="-1">Tarball last modified: <i>${MODtarball}</i>
    - <a href=ChangeLog>ChangeLog</a>
</font> <br>
<blockquote>
<img src=arch.gif>
<p>
<b>foo2zjs</b> is an open source printer driver for printers that use the
Zenographics
<a href="http://oem.zeno.com/public/?SDK/0_SuperPrint%20SDK/4_Reference/File%20and%20Stream%20Formats/ZjStream.htm">
ZjStream wire protocol</a> for their print data, such as the
<a href=http://www.minolta-qms.com/products/color/mc2300DL/index.html>
Minolta/QMS magicolor 2300 DL</a>.  These printers are often erroneously
referred to as winprinters or GDI printers.  However, Microsoft GDI only
mandates the API between an application and the printer driver, not the
protocol
on the wire between the printer driver and the printer.
In fact, ZjStream printers
are raster printers which happen to use a very efficient wire protocol
which was developed by
<a href=http://www.zeno.com>Zenographics</a>
and licensed by most major printer
manufacturers for at least some of their product lines.  ZjStream is
just one of many wire protocols that are in use today, such as Postscript,
PCL, Epson, etc.
<p>
This driver uses <a href=http://www.ghostscript.com>Ghostscript</a>
to perform all of the heavy lifting (image processing).
There are five major components to the <b>foo2zjs</b> printer driver.
<ul>
<li><b>foo2zjs</b> - the page image to protocol conversion engine of the driver.
<li><b>foo2zjs-wrapper</b> - a shell script (compatible with foomatic)
which runs <b>ghostscript</b> and <b>foo2zjs</b> in a pipeline.
<li><b>icc2ps</b> - converts an ICM color profile to a Postscript CRD,
which is then fed into Ghostscript before the users Postscript program.
<li><b>foomatic-db</b> - <a href=http://www.linuxprinting.org>foomatic</a>
database entries which describe the supported printers and their options so that
printer spoolers know how to access the printer using <b>foo2zjs-wrapper</b>.
<li><b>zjsdecode</b> - a tool for developers to inspect ZjStreams.
</ul>
<p>
You can read the <a href=manual.pdf>manual pages</a> for more information.
<p>
With the <b>foo2zjs</b> driver, you can print to some Minolta/QMS,
HP and possibly other ZjStream printers:
<blockquote>
<table border>
<tr> <th> Supported Printer</th> <th>B/W</th> <th>Color</th> <th>Driver</th><th>Notes</th> </tr>
<tr> <td>Minolta/QMS magicolor 2300 DL</td> <td>Yes</td> <td>Yes</td>
    <td>foo2zjs</td>
    <td>This is the printer owned by the author.</td> </tr>
<tr> <td>Minolta/QMS magicolor 2200 DL</td> <td>Yes</td> <td>Yes</td>
    <td>foo2zjs</td>
    <td>Tested by Adam Erickson.</td> </tr>
<tr> <td>Minolta Color PageWorks/Pro L</td> <td>Yes</td> <td>Yes</td>
    <td>foo2zjs</td>
    <td>Tested by tekknogenius.</td> </tr>
<tr> <td>HP LaserJet 1005</td> </td> <td>Yes</td> <td>No</td>
    <td>foo2zjs</td>
    <td>Tested by Brian Batey</td> </tr>
<tr> <td>HP LaserJet 1000</td> </td> <td>Yes</td> <td>No</td>
    <td>foo2zjs</td>
    <td>Tested by Andrew Schretter</td> </tr>
</table>
</blockquote>
<p>
These printers are not ZjStream printers, and are not supported by this driver:
<blockquote>
<table border>
<tr> <th>Unsupported Printer</th> <th>Notes</th> </tr>
<tr> <td>Minolta/QMS magicolor 2300W</td>
    <td>Try the <a href=http://m2300w.sf.net/>m2300w driver</a></td> </tr>
<tr> <td>Minolta/QMS PagePro 1[23]xxW</td>
    <td>Try <a href=http://sweb.cz/beetman>Beetman's 1200W driver</a>
	or <a href=http://www.hinterbergen.de/mala/min12xxw>Schiller's 1[23]xxW driver</a>
    </td> </tr>
</table>
</blockquote>

<p>
You might also be interested in my <a href=${URLOAK}/>foo2oak</a> driver for
OAKT protocol printers such as the HP Color LaserJet 1500.

</blockquote>

<h3>Contribute (MUST READ)</h3>
<blockquote>
<table>
<tr>
<td>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_xclick">
<input type="hidden" name="business" value="linuxtrade@mn.rr.com">
<input type="hidden" name="undefined_quantity" value="1">
<input type="hidden" name="item_name" value="foo2zjs printer driver">
<input type="hidden" name="item_number" value="donation">
<input type="hidden" name="amount" value="">
<input type="hidden" name="no_shipping" value="1">
<input type="hidden" name="return"
	    value="${URLZJS}/">
<input type="hidden" name="cancel_return"
	    value="${URLZJS}/">
<input type="image"
	    src="http://images.paypal.com/images/x-click-butcc-donate.gif"
	    border="0" name="submit"
	    alt="Contribute to foo2zjs development">
</form>
</td>
<td>
&lt;-- Click here to support the development of this and other printer
drivers.  Any amount is appreciated.  Also desired: Minolta 2300 DL
lower paper tray, HP LaserJet 1500, HP LaserJet 1000, Apple Mac OS X system.
</td>
</tr>
</table>
<p>
I keep a record of everyone who has contributed to this driver,
in terms of 1) money or equipment, 2) <i>usable</i> bug reports,
3) code and advice.
<p>
There are over 1000 unique IP addresses that have downloaded
this driver.  There are only a handful of people who have ever
contributed to this project (and my thanks go out to them).
<p>
Before you email me, make sure you have contributed something.
<p>
And if you work for <b>Kyocera-Minolta</b> or <b>HP</b>,
you <b>should be embarrased</b> for your company.
Neither company has ever offered any kind of support for this driver.
</blockquote>

<h3>Download and Install</h3>
<blockquote>
Click the link, or cut and paste the whole command line below to download
the driver.
<p>
<blockquote><pre>
    $ wget <a href=${URLZJS}/foo2zjs.tar.gz>${URLZJS}/foo2zjs.tar.gz</a>
</pre></blockquote>

<p>Now unpack it:
<blockquote><pre>
Unpack:
    $ tar zxf foo2zjs.tar.gz
    $ cd foo2zjs
</pre></blockquote>

<p>
Now compile and install it.
The <a href=INSTALL>INSTALL</a> file contains more detailed instructions;
please read it now.
<blockquote><pre>
Compile:
    $ make

(Optional) Get extra files from the web, such as .ICM profiles for color
correction, and firmware:
    $ ./getweb 2300	# Get Minolta 2300 DL .ICM files
    $ ./getweb 2200	# Get Minolta 2200 DL .ICM files
    $ ./getweb cpwl	# Get Minolta Color PageWorks/Pro L .ICM files
    $ ./getweb 1005	# Get HP LJ1005 firmware file
    $ ./getweb 1000	# Get HP LJ1000 firmware file
    $ ./getweb all	# Get all of the above

Install driver, foomatic XML files, and extra files:
    $ su
    # make install
</pre></blockquote>

<p>Now create printer entries for your spooler.
Create at least one queue for monochrome, and another
queue for color printing.  Create the queues first, then edit them
and set the device options as desired.  See your
operating system documentation for further details on creating
a printer queue.  Click any hyperlinks below for sample screenshots.
    <blockquote>
    For Redhat 7.2/7.3/8.0/9.0 and Fedora Core 1 users:
<blockquote><pre>
    # <a href=redhat/>printconf-gui</a>
</pre></blockquote>
    For Mandrake users:
<blockquote><pre>
    # printerdrake
</pre></blockquote>
    For Suse 9.0 users:
<blockquote><pre>
    # yast
</pre></blockquote>
    </blockquote>
<p>For a networked Minolta/QMS 2300 DL, I used a "Queue Type"
of "Unix Printer (LPD)", and set the "Server" to the IP address
of the printer, and the "Queue" to "lp".
<p>For low level testing, you can also create a "raw queue", which will accept
ZjStream files as-is and send them directly to the printer.
</blockquote>

<h3>Color Correction</h3>
<blockquote>
There are now two methods for color correction available in foo2zjs:
the original ICM-based method and Gerhard Fuernkranz and Leif Birkenfeld's
CRD-based method.  Each method has advantages and disadvantages, which
is why both methods are still included.
<p>
The original ICM-based method uses the manufacturer-supplied ICM color
profiles and converts those to CRD's on the fly.  This method is the
fastest.  However it suffers from two problems.  First, the manufacturer
profiles are tuned for their Windows driver, not foo2zjs.  So the colors
aren't great.  Second, Ghostscript has serious issues with its dithering
(halftoning) alogorithms.
With Ghostscript 7.05, the dithering is highly visible and
attempting to tune it to be less visibile (with, say, -dDITHERPPI=150)
results in areas of color blotches.  With Ghostscript 8.00, the dithering
results in highly visible banding.  The advantages of the ICM method
are that its the fastest of the two methods, and it often allows the
foo2zjs engine to optimize monochrome output on a color queue to printing
just the K plane.
<p>
The CRD-based method was tuned for Ghostscript and the foo2zjs engine,
and produces better colors.  It also uses thresholding to make up
for the halftoning issues in Ghostscript.  The drawbacks of this
method are that it is very slow, it requires Ghostscript 8.14 for
best results, and it currently cannot optimize
pure monochrome text printed on a color queue to printing just the K plane.
It is expected that this latter deficiency will be fixed soon.  It
is unknown when Ghostscript 8.14 will generally be available in
Linux distros.
<p>
So, pick your poison.
</blockquote>

<h3>History</h3>
<blockquote>
The <b>foo2zjs</b> engine began life as Robert Szalai's
<a href="http://www.linuxprinting.org/download/printing/pbmtozjs.c">
pbmtozjs</a> program.
It also uses Markus Kuhn's
<a href=http://www.cl.cam.ac.uk/~mgk25/jbigkit/>
JBIG-KIT compression library</a> (included), and Marti Maria's
<a href=http://www.littlecms.com>icc2ps program</a> (included).

<p>The <b>foo2zjs</b> engine was overhauled by Rick Richardson to
add color support for the Minolta/QMS 2300DL,
add command line options,
limit data chunk size to 65536 bytes,
and other miscellaneous features.  Rick also contributed the <b>zjsdecode</b>
program and the foomatic database entries for the Minolta/QMS magicolor
2300 DL.
<p>Gerhard Fuernkranz and Leif Birkenfeld created the CRD-based
color correction methods.
</blockquote>

<h3>Resources</h3>
<blockquote>
<ul>
<li>
<a href=http://www.linuxprinting.org>www.linuxprinting.org</a>
- Home of foomatic
<li>
<a href=http://ddk.zeno.com/Reference/ZjStream/Default.htm>ZjStream Reference</a>
- Overview of ZjS data format
<li>
<a href=http://www.freecolormanagement.com/color/links.htm>freecolormanagement.com</a>
- CMS Links
<li>
<a href=http://www.aim-dtp.net/index.htm>www.aim-dtp.net/index.htm</a>
-  Accurate Image Manipulation for Desktop Publishing 
<li>
<a href=http://www.color.org/>http://www.color.org/</a>
- The International Color Consortium
<li>
<a href=http://web.access.net.au/argyll/color.html>web.access.net.au/argyll/color.html</a>
- icclib - ICC (.icm) file format I/O library
<li>
<a href=http://www.fho-emden.de/~hoffmann/howww41a.html>Gernot Hoffmann</a>
- Color printer test pages
<li>
<a href=http://www.drycreekphoto.com/custom/customprofiles.htm>Dry Creek Photo</a>
- Possible source for buying a custom .ICM color profile ($50)
<li>
<a href=http://www.chromix.com/ColorValet/Print/>ColorValet</a>
- Possible source for buying a custom .ICM color profile ($100)
<li>
<a href=http://www.icscolor.com/profilecity1.asp>ProfileCity</a>
- Possible source for buying a custom .ICM color profile ($100)
<li>
<a href=http://digitaldog.net/services.html>The Digital Dog</a>
- Possible source for buying a custom .ICM color profile ($100)
<li>
<a href=http://www.network-theory.co.uk/articles/booklet.html>Printing booklets</a>
- ... with PSUTILS -- support for creep (shingling)
</ul>
</blockquote>

<hr WIDTH="100%">

Please <a HREF="mailto:rickr@mn.rr.com">E-mail</a>
<a href=http://home.mn.rr.com/richardsons/>Rick Richardson</a> with any
questions, comments or corrections.
I do not read or reply to HTML email or messages sent under an alias.
Use your real name in any correspondence.
<br>
<img src="http://rkkda.com/tinc?key=G4NgRyQ9&no=1">
<font SIZE="-1">Last modified: <i>${MODindex}</i></font>
<br>
</body>
</html>