diff options
Diffstat (limited to 'doc/Deprecated.htm')
-rw-r--r-- | doc/Deprecated.htm | 5769 |
1 files changed, 0 insertions, 5769 deletions
diff --git a/doc/Deprecated.htm b/doc/Deprecated.htm deleted file mode 100644 index 62be1773..00000000 --- a/doc/Deprecated.htm +++ /dev/null @@ -1,5769 +0,0 @@ -<!doctype html> -<html lang="en"> -<head> - <meta http-equiv="content-type" content="text/html; charset=utf-8"> - <meta name="viewport" content="user-scalable=yes, initial-scale=1, width=device-width"> - <link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:200,200i,300,300i,400,400i,600,600i,700,700i,900,900i" rel="stylesheet"> - <link rel="shortcut icon" href="images/favicon.svg"> - <title>Deprecated Ghostscript Features</title> - <link href="default.css" rel="stylesheet" type="text/css"> -</head> - -<body> - <header><div class="title"><a href="index.html"><h1 aria-label="title">Ghostscript documentation</h1><h2 aria-label="version"></h2></a></div><a href="Search.htm" aria-label="Search" id="searchSite"><div class="search"></div></a></header> - <main> - <article> - <div class="outer"> - <div class="inner"> -<!--START EDITING HERE--> - -<h1>Deprecated Ghostscript Features</h1> - -<h2><a name="toc"></a>Table of contents</h2> - -<ul class="toc"> - <li><a href="#Options">Deprecated Options</a></li> - <li><a href="#HP8_color_inkjet">H-P 8xx, 1100, and 1600 color inkjet printers</a></li> - <li> - <ul> - <li><a href="#HP8_gdevcd8">Drivers contained in <code>gdevcd8.c</code></a></li> - <li><a href="#HP8_further_documentation">Further documentation</a></li> - </ul> - </li> - <li><a href="#HP880_color_inkjet">H-P 812, 815, 832, 880, 882, 895, and 970 color inkjet printers</a></li> - <li> - <ul> - <li><a href="#HP880_gdevcd8">Drivers contained in <code>gdevcd8.c</code></a></li> - <li><a href="#HP880_further_documentation">Further documentation</a></li> - </ul> - </li> - <li><a href="#HP_color_inkjet">Other H-P color inkjet printers</a></li> - <li> - <ul> - <li><a href="#HP_gdevcdj">Drivers contained in <code>gdevcdj.c</code></a></li> - <li><a href="#HP_paper_size">Default paper size</a></li> - <li><a href="#HP_limits">Deskjet physical limits</a></li> - <li><a href="#HP_command_line">Printer properties (command-line parameters)</a></li> - <li> - <ul> - <li><a href="#HP_bpp">Bits per pixel</a></li> - <li><a href="#HP_deskjet_properties">Deskjet properties</a></li> - <li><a href="#HP_paintjet_properties">Paintjet XL300 / Paintjet XL properties</a></li> - </ul> - </li> - <li><a href="#HP_gamma">Gamma correction</a></li> - <li><a href="#HP_resolution_enhance">HP's resolution-enhanced mode for Inkjet printers</a></li> - <li><a href="#HP_tips">General tips</a></li> - </ul> - </li> - - <li><a href="#BJC_8200">Canon BJC-8200 printer</a></li> - <li><a href="#BJC">Other Canon BubbleJet (BJC) printers</a></li> - <li> - <ul> - <li><a href="#BJC_history">History</a></li> - <li><a href="#BJC_build">Configuring and building the BJC drivers</a></li> - <li> - <ul> - <li><a href="#BJC_defaults">Modify values in <code>gdevbjc.h</code></a></li> - <li><a href="#BJC_CMYK_RGB">CMYK-to-RGB color conversion</a></li> - <li><a href="#BJC_vertical_centering">Vertical centering of the printable area</a></li> - <li><a href="#BJC_margins">Page margins</a></li> - <li><a href="#BJC_compile">Makefile and compilation</a></li> - </ul> - </li> - <li><a href="#BJC_usage">Use of the drivers</a></li> - <li> - <ul> - <li><a href="#BJC_options">Supported Options and Defaults</a></li> - <li><a href="#BJC_device_info">Device information</a></li> - <li><a href="#BJC_HW_margins">Hardware margins</a></li> - <li><a href="#BJC_PPD">PostScript printer description (PPD) files</a></li> - <li><a href="#BJC_PPD_custom">Customizing the PPD files</a></li> - </ul> - </li> - - <li><a href="#BJC_bugs">How to report problems</a></li> - <li><a href="#BJC_acks">Acknowledgements</a></li> - </ul> - </li> - - <li><a href="#STC_epson_stylus">Epson Stylus color printer (see also <code>uniprint</code>)</a></li> - <li> - <ul> - <li><a href="#STC_usage">Usage</a></li> - <li><a href="#STC_options">Options</a></li> - <li><a href="#STC_FAQ">Application note and FAQ</a></li> - <li> - <ul> - <li><a href="#STC_FAQ_A3">Support for A3 paper</a></li> - <li><a href="#STC_FAQ_margins">Margins, PageSize</a></li> - <li><a href="#STC_FAQ_II_IIS_1500">Stylus Color II / IIs and 1500</a></li> - </ul> - </li> - <li><a href="#STC_recommendations">Recommendations</a></li> - <li> - <ul> - <li><a href="#STC_dither_experiment">Color dithering experiments with <code>gdevstc</code> 1.21</a></li> - </ul> - </li> - <li><a href="#STC_color_transform">Color transformation</a></li> - <li><a href="#STC_CAM"><code>ColorAdjustMatrix</code></a></li> - <li><a href="#STC_RGBCMYK_coding">RGB / CMYK coding and transfer, and <code>BitsPerPixel</code></a></li> - <li><a href="#What_is_weaving">What is weaving?</a></li> - <li><a href="#STC_print_modes">Print mode parameters</a></li> - <li> - <ul> - <li><a href="#STC_unidirectional"><code>Unidirectional</code></a></li> - <li><a href="#STC_noweave"><code>Microweave</code>, <code>noWeave</code> and <code>OutputCode=deltarow</code></a></li> - <li><a href="#STC_model"><code>Model</code></a></li> - </ul> - </li> - <li><a href="#STC_Pitfalls">Bugs and pitfalls</a></li> - <li><a href="#STC_Tests">Tests</a></li> - <li> - <ul> - <li><a href="#STC_OutputCodes">The various OutputCodes</a></li> - <li><a href="#STC_printing_time">Printing time related to other options</a></li> - </ul> - </li> - <li><a href="#STC_acks">Acknowledgments</a></li> - </ul> - </li> - <li><a href="#Uniprint">uniprint, a flexible unified printer driver</a></li> - <li> - <ul> - <li><a href="#Uni_state">The state of this driver</a></li> - <li><a href="#Uni_background">Notes on <code>uniprint</code>'s background</a></li> - <li><a href="#Uni_make_pfile">Godzilla's guide to the creation of Unified Printer Parameter (<code>.upp</code>) files</a></li> - <li><a href="#Uni_all_parameters">All parameters in brief</a></li> - <li><a href="#Uni_honors"><code>Uniprint</code>'s Roll of Honor</a></li> - <li><a href="#Uni_weaving_howto"><code>Uniprint</code> weaving parameters howto</a></li> - <li><a href="#Uni_esc300">Extension to <code>uniprint</code> for the Epson Stylus Color 300</a></li> - </ul> - </li> -</ul> - - - -<!-- [1.2 end table of contents] =========================================== --> - -<!-- [1.3 begin hint] ====================================================== --> - -<p><strong>These devices are no longer supported and/or superceeded by newer methods. -The documentation is kept here for reference. Be advised that these devices -will be removed in future versions of Ghostscript.</strong></p> - -<p>Supported devices are descripted in <a href="Devices">Details of Ghostscript -output devices</a>.</p> - -<p>For other information, see the <a href="Readme.htm">Ghostscript -overview</a>. You may also be interested in <a href="Make.htm">how to -build Ghostscript</a> and <a href="Install.htm">install it</a>, as well as -the description of the <a href="Drivers.htm">driver interface</a>.</p> - -<!-- [1.3 end hint] ======================================================== --> - -<hr> - -<!-- [1.0 end visible header] ============================================== --> - -<!-- [2.0 begin contents] ================================================== --> - -<h2><a name="Options"></a>Deprecated options</h2> - -<p> -For compatibility with older versions of Ghostscript, <tt>-sOUTPUTFILE</tt> -is a synonym for <tt>-sOutputFile</tt>. It should not be used in new code.</p> - -<hr> - -<h2><a name="HP8_color_inkjet"></a>H-P 8xx, 1100, and 1600 color inkjet printers</h2> - -<p> -This section, written by Uli Wortmann <<a -href="mailto:uliw@erdw.ethz.ch">uliw@erdw.ethz.ch</a>>, deals with the -DeskJet 670, 690, 850, 855, 870, 890, 1100, and 1600.</p> - -<h3><a name="HP8_gdevcd8"></a>Drivers contained in <code>gdevcd8.c</code></h3> - -<p> -The source module <code>gdevcd8.c</code> contains four generic drivers:</p> - -<blockquote> -<table> -<tr> - <td><code>cdj670</code></td> - <td colspan="2">HP DeskJet 670 and 690</td> -</tr> -<tr> - <td><code>cdj850</code></td> - <td colspan="2">HP DeskJet 850, 855, 870, and 1100</td> -</tr> -<tr> - <td><code>cdj890</code></td> - <td colspan="2">HP DeskJet 890</td> -</tr> -<tr> - <td><code>cdj1600</code></td> - <td colspan="2">HP DeskJet 1600</td> -</tr> -</table> -</blockquote> - -<h3><a name="HP8_further_documentation"></a>Further documentation</h3> -<p> <strong>Credits:</strong> Much of the driver is based on ideas derived from the - cdj550 driver of George Cameron. The support for the hp670, hp690, hp890 - and hp1600 was added by Martin Gerbershagen.</p> -<blockquote> - <table> - <tr> - <th width="20%">Date</th> - <th width="20%">Version</th> - <th width="60%">Comments</th> -</tr> - -<tr> - <td>11.11.96</td> - <td>Version 1.0</td> - <td></td> -</tr> -<tr> - <td>25.08.97</td> - <td>Version 1.2</td> - <td>Resolved all but one of the known bugs, introduced a couple of perfomance improvements. Complete new color-transfer-function handling (see gamma).</td> -</tr> -<tr> - <td>01.06.98</td> - <td>Version 1.3</td> - <td>Due to the most welcome contribution of Martin Gerbershagen - (ger@ulm.temic.de), support for the hp670, hp690 and hp890 and - hp1600 has been added. Martin has also resolved all known bugs.<br> - Problems:Dark colors are still pale.</td> -</tr> -</table> -</blockquote> - -<p> -The hp690 is supported through the hp670 device, the hp855, hp870 and the -hp1100 through the hp850 device. The driver needs no longer special -switches to be invoked except <code>-sDEVICE=cdj850</code>, -<code>-sDEVICE=CDJ890</code>, <code>-sDEVICE=CDJ670</code>, or -<code>-sDevice=CDJ1600</code>. The following switches are supported.</p> - -<blockquote> -<table> -<tr> - <td><code>-dPapertype=</code></td> - - <td>0</td> - - <td>plain paper [default]</td> -</tr> -<tr> - <td></td> - - <td>1</td> - - <td>bond paper</td> -</tr> -<tr> - <td></td> - - <td>2</td> - - <td>special paper</td> -</tr> -<tr> - <td></td> - - <td>3</td> - - <td>glossy film</td> -</tr> -<tr> - <td></td> - - <td>4</td> - - <td>transparency film</td> -</tr> -<tr> - <td></td> - <td> </td> - <td>Currently the lookup tables are unsuited for printing on - special paper or transparencies. For these please revert to the - gamma functions.</td> -</tr> -<tr> - <td><code>-dQuality=</code></td> - - <td>-1</td> - - <td>draft</td> -</tr> -<tr> - <td></td> - <td>0</td> - - <td>normal [default]</td> -</tr> -<tr> - <td></td> - <td>1</td> - - <td>presentation</td> -</tr> -<tr> - <td><code>-dRetStatus=</code></td> - - <td>0</td> - - <td>C-RET off</td> -</tr> -<tr> - <td></td> - - <td>1</td> - - <td>C-RET on [default]</td> -</tr> -<tr> - <td><code>-dMasterGamma=</code></td> - - <td>3.0</td> - - <td>[default = 1.0]</td> -</tr> -</table> -</blockquote> - -<blockquote> -<b>Note:</b> To take advantage of the calibrated color-transfer functions, -be sure not to have any gamma statements left! If you need to (i.e., for -overhead transparencies), you still can use the gamma functions, but they -will override the built-in calibration. To use gamma in the traditional -way, set MasterGamma to any value greater than 1.0 and less than 10.0. To -adjust individual gamma values, you have to additionally set MasterGamma to -a value greater than 1.0 and less than 10.0. With the next release, gamma -functions will be dropped. -</blockquote> - -<p> -When using the driver, be aware that printing at 600dpi involves -processing large amounts of data (> 188MB !). Therefore the -driver is not what you would expect to be a fast driver ;-) -This is no problem when printing a full-sized color page (because -printing itself is slow), but it's really annoying if you print only -text pages. Maybe I can optimize the code for text-only pages in a -later release. Right now, it is recommended to use the highest -possible optimisation level your compiler offers. -For the time being, use the cdj550 device with <code>-sBitsPerPixel=3</code> -for fast proof prints. If you simply want to print 600dpi BW data, -use the cdj550 device with <code>-sBitsPerPixel=8</code> (or 1).</p> - -<p> -Since the printer itself is slow, it may help to set the process priority -of the gs process to "regular" or even less. On a 486/100MHz this is still -sufficient to maintain a continuous data flow. Note to OS/2 users: simply -put the gs window into the background or minimize it. Also make sure that -<code>print01.sys</code> is invoked without the <code>/irq</code> -switch (great speed improvement under Warp4).</p> - -<p> -The printer default settings compensate for dot-gain by a calibrated -color-transfer function. If this appears to be too light for your business -graphs, or for overhead transparencies, feel free to set -<code>-dMasterGamma=1.7</code>. Furthermore, you may tweak the gamma -values independently by setting <code>-dGammaValC</code>, -<code>-dGammaValM</code>, <code>-dGammaValY</code> or -<code>-dGammaValK</code> (if not set, the values default to -<code>MasterGamma</code>). This will only work when -<code>-dMasterGamma</code> is set to a value greater than 1.0.</p> - -<p> -Further information, bugs, tips etc, can be found at my website. To learn -more about gamma, see -<a href="ftp://ftp.igd.fhg.de/pub/doc/colour/GammaFAQ.pdf">ftp://ftp.igd.fhg.de/pub/doc/colour/GammaFAQ.pdf</a>.</p> - -<p> -Depending on how you transfer the files, under UNIX you may need to remove -the CRs of the CR-LF sequence used for end-of-line on DOS-based (MS -Windows-based) systems. You can do this in unpacking the files with <code>unzip -a hp850.zip</code>.</p> - -<p> -To compile with gs5.x or later, simply add to your makefile</p> -<blockquote> -DEVICE_DEVS4=cdj850.dev cdj670.dev cdj890.dev cdj1600.dev -</blockquote> - -<p> -Have fun!</p> - -<p> -Uli <<a href="mailto:uliw@erdw.ethz.ch">uliw@erdw.ethz.ch</a>> -<br><a href="http://www.erdw.ethz.ch/~bonk/">http://www.erdw.ethz.ch/~bonk/</a></p> - -<hr> - -<h2><a name="HP880_color_inkjet"></a>H-P 812, 815, 832, 880, 882, 895, and 970 color inkjet printers</h2> - -<p> -This section, written by Matthew Gelhaus <<a -href="mailto:hp880@gelhaus.net">hp880@gelhaus.net</a>>, deals with the -DeskJet 812, 815, 832, 880, 882, 895, and 970.</p> - -<p> -This is a modified version of the <a href="#HP8_color_inkjet">HP8xx driver</a> -written by Uli Wortmann. More information and download are available at -<a href="http://www.gelhaus.net/hp880c/">http://www.gelhaus.net/hp880c/</a>.</p> - -<h3><a name="HP880_gdevcd8"></a>Drivers contained in <code>gdevcd8.c</code></h3> - -<p> -The source module <code>gdevcd8.c</code> contains one generic driver:</p> - -<blockquote> -<table> -<tr> - <td><code>cdj880</code></td> - <td>HP DeskJet 812, 815, 832, 880, 882, 895, and 970</td> -</tr> -</table> -</blockquote> - -<h3><a name="HP880_further_documentation"></a>Further documentation</h3> - -<p> -<b>Credits:</b> This driver is based on the cdj850 driver by Uli Wortmann, and shares the same -internal structure, although the PCL3+ interpretation has changed.</p> - -<blockquote> -<table> - <tr> - <th width="20%">Date</th> - <th width="20%">Version</th> - <th width="60%">Comments</th> -</tr> - -<tr> - <td>15.03.99</td> - - <td>Version 1.3</td> - - <td>Initial version, based on Version 1.3 of Uli Wortmann's driver.</td> -</tr> -<tr> - <td>26.02.00</td> - - <td>Version 1.4beta</td> - - <td>Greatly improved color handling & dithering, but not yet complete enough - to use for text.</td> -</tr> -</table> -</blockquote> - -<p> -All printers are supported through the cdj880 device. Invoke with -<code>-sDEVICE=cdj880</code>. The following switches are supported.</p> - -<blockquote> -<table> -<tr> - <td><code>-dPapertype=</code></td> - - <td>0</td> - - <td>plain paper [default]</td> -</tr> -<tr> - <td></td> - <td>1</td> - - <td>bond paper</td> -</tr> -<tr> - <td></td> - - <td>2</td> - - <td>special paper</td> -</tr> -<tr> - <td></td> - - <td>3</td> - - <td>glossy film</td> -</tr> -<tr> - <td></td> - - <td>4</td> - - <td>transparency film</td> -</tr> -<tr> - <td></td> - <td> </td> - <td>Currently the lookup tables are unsuited for printing on - special paper or transparencies. For these please revert to the - gamma functions.</td> -</tr> -<tr> - <td><code>-dQuality=</code></td> - - <td>-1</td> - - <td>draft</td> -</tr> -<tr> - <td></td> - - <td>0</td> - - <td>normal [default]</td> -</tr> -<tr> - <td></td> - - <td>1</td> - - <td>presentation</td> -</tr> -<tr> - <td><code>-dMasterGamma=</code></td> - - <td>3.0</td> - - <td>[default = 1.0]</td> -</tr> -</table> -</blockquote> - -<p> -The printer default settings compensate for dot-gain by a pre-defined -color-transfer function. If this appears to be too light for your business -graphs, or for overhead transparencies, feel free to set -<code>-dMasterGamma=1.7</code>. Furthermore, you may tweak the gamma -values independently by setting <code>-dGammaValC</code>, -<code>-dGammaValM</code>, <code>-dGammaValY</code> or -<code>-dGammaValK</code> (if not set, the values default to -<code>MasterGamma</code>). This will only work when -<code>-dMasterGamma</code> is set to a value greater than 1.0.</p> - -<p> -Further information, bugs, tips etc, can be found at my website.</p> - -<p> -To compile with gs6.x or later, simply add to your makefile</p> -<blockquote> -DEVICE_DEVS4=$(DD)cdj880.dev -</blockquote> - -<p> -Matthew Gelhaus <<a href="mailto:hp880@gelhaus.net">mailto:hp880@gelhaus.net</a>> -<br><a href="http://www.gelhaus.net/hp880c/">http://www.gelhaus.net/hp880c/</a></p> - -<hr> - -<h2><a name="HP_color_inkjet"></a>H-P color inkjet printers</h2> - -<p> -This section, written by George Cameron, deals with the DeskJet 500C, -DeskJet 550C, PaintJet, PaintJet XL, PaintJet XL300, the DEC LJ250 -operating in PaintJet-compatible mode.</p> - -<h3><a name="HP_gdevcdj"></a>Drivers contained in <code>gdevcdj.c</code></h3> - -<p> -The source module <code>gdevcdj.c</code> contains six generic drivers:</p> - -<blockquote> -<table> -<tr> - <td><code>cdj500</code></td> - <td>HP DeskJet 500C and 540C</td> -</tr> -<tr> - <td><code>cdj550</code></td> - <td>HP DeskJet 550C, 560C, 660C, 660Cse</td> -</tr> -<tr> - <td><code>pjxl300</code></td> - <td>HP PaintJet XL300, DeskJet 1200C, and CopyJet</td> -</tr> -<tr> - <td><code>pjtest</code></td> - <td>HP PaintJet</td> -</tr> -<tr> - <td><code>pjxltest</code></td> - <td>HP PaintJet XL</td> -</tr> -<tr> - <td><code>declj250</code></td> - <td>DEC LJ250</td> -</tr> -</table> -</blockquote> - -<p> -All these drivers have 8-bit (monochrome), 16-bit and 24-bit (colour) and -for the DJ 550C, 32-bit (colour, CMYK mode) options in addition to standard -colour and mono drivers. It is also possible to set various -printer-specific parameters from the command line, for example</p> - -<blockquote><code> -gs -sDEVICE=cDeskJet -dBitsPerPixel=16 -dDepletion=1 -dShingling=2 tiger.eps -</code></blockquote> - -<p> -<b>Note:</b> the old names <code>cDeskJet</code>, -<code>cdjcolor</code> and <code>cdjmono</code> drivers have been -retained; however, their functionality duplicates that available using the -drivers above (and <code>cDeskJet</code> is identical to -<code>cdj500</code>). That is, we can use</p> - -<blockquote> -<table> -<tr> - <td><code>gs -sDEVICE=cdj500 -dBitsPerPixel=24</code></td> - <td>for <code>cdjcolor</code>, and</td> -</tr> -<tr> - <td><code>gs -sDEVICE=cdj500 -dBitsPerPixel=1</code></td> - <td>for <code>cdjmono</code></td> -</tr> -</table> -</blockquote> - -<h3><a name="HP_paper_size"></a>Default paper size</h3> - -<p> -If the preprocessor symbol <code>A4</code> is defined, the default paper -size is ISO A4; otherwise it is U.S. letter size (see about -<a href="Use.htm#Known_paper_sizes">paper sizes</a> in the usage -documentation). You can <a href="Use.htm#Paper_size">specify other paper -sizes</a> on the command line, including A3 for the PaintJet XL and -PaintJet XL300, as also explained in the usage documentation.</p> - -<h3><a name="HP_limits"></a>DeskJet physical limits</h3> - -<p> -The DeskJet's maximum printing width is 2400 dots, or 8 inches -(20.32cm). The printer manuals say that the maximum recommended printing -height on the page is 10.3 inches (26.16cm), but since this is obviously -not true for A4 paper, and I have been unable to detect any problems in -printing longer page lengths, this would seem to be a rather artificial -restriction.</p> - -<p> -All DeskJets have 0.5 inches (1.27cm) of unprintable bottom margin, due to the mechanical -arrangement used to grab the paper. Side margins are approximately 0.25 inches (0.64cm) -for U.S. letter paper, and 0.15 inches (0.38cm) for A4.</p> - -<h4><a name="HP_command_line"></a>Printer properties (command-line parameters)</h4> - -<p> -Several printer "properties" have been implemented for these printers. -Those available so far are all integer quantities, and thus may be -specified, for instance, like</p> - -<blockquote> -<code>gs -dBitsPerPixel=32 -dShingling=1</code> ... -</blockquote> - -<p> -which sets the <code>BitsPerPixel</code> parameter to 32 and the -<code>Shingling</code> parameter to 1.</p> - -<h4><a name="HP_bpp"></a>Bits per pixel</h4> - -<p> -If the preprocessor symbol <code>BITSPERPIXEL</code> is defined as an -integer (see below for the range of allowable values), that number defines -the default bits per pixel (bit depth) for the generic drivers. If the -symbol is undefined, the default is 24 bits per pixel. It is, of course, -still possible to specify the value from the command line as described -below. Note also that the <code>cDeskJet</code>, -<code>cdjcolor</code> and <code>cdjmono</code> drivers are unaffected -by setting this symbol, as their default settings are predefined to be 1, 3 -and 24 respectively.</p> - -<p> -All of the drivers in <code>gdevcdj.c</code> accept a command line -option to set the <code>BitsPerPixel</code> property. This gives -considerable flexibility in choosing various tradeoffs among speed, -quality, colour, etc. The valid numbers are:</p> - -<blockquote> -<table> - <tr> - <th width="15%">BITSPERPIXEL</th> - <th width="85%">Comments</th> - </tr> -<tr> - <td><strong>1</strong></td> - <td>A standard Ghostscript monochrome driver, using black ink (by - installing the separate mono cartridge in the case of the DeskJet 500C, or - automatically for the other printers).</td> -</tr> -<tr> - <td><b>3</b></td> - <td>A standard Ghostscript colour driver, using internal dithering. This - is fast to compute and to print, but the clustered dithering can lose some - detail and colour fidelity.</td> -</tr> -<tr> - <td><b>8</b></td> - <td>An "error-diffusion" monochrome driver which uses Floyd-Steinberg - dithering to print greyscale images. The patterns are much more randomised - than with the normal clustered dithering, but the data files can be much - larger and somewhat slower to print.</td> -</tr> -<tr> - <td><b>16</b></td> - <td>A "cheaper" version of the 24-bit driver, which generates - Floyd-Steinberg colour dithered output using the minimum memory (this may - be helpful when using Ghostscript has not been compiled using a 16-bit - build environment). The quality can be almost as good as the 24-bit - version.</td> -</tr> -<tr> - <td><b>24</b></td> - <td>A high-quality colour driver using Floyd-Steinberg dithering for - maximum detail and colour range. However, it is very memory-intensive, and - thus can be slow to compute. It tends to produce rather larger raw data - files, so they can also take longer to print.</td> -</tr> -<tr> - <td><b>32</b></td> - <td>Only for the DeskJet 550C, which uses the black cartridge and the - colour cartridge simultaneously (that is, CMYK printing). This printer can - both be faster and give higher quality than the DeskJet 500C, because of - the true black ink. (Note that the 24-bit mode also permits CMYK printing - on this printer, and uses less memory). Any differences between 24-bit and - 32-bit should be small.</td> -</tr> -</table> -</blockquote> - -<h4><a name="HP_DeskJet_properties"></a>DeskJet properties</h4> - -<blockquote> -<table> -<tr> - <th width="20%">Name</th> - <th width="20%">Type</th> - <th width="60%">Comments</th> -</tr> -<tr> - <td><code>BlackCorrect</code></td> - - <td><code>int</code></td> - - <td>Colour correction to give better blacks when using the DJ500C in colour mode. For example, the default of 4 reduces the cyan component to 4/5. Range accepted: 0 - 9 (0 = none).</td> -</tr> -<tr> - <td><code>Shingling</code></td> - - <td><code>int</code></td> - - <td>Interlaced, multi-pass printing: 0 = none, 1 = 50%, 2 = 25%, 2 is best and slowest.</td> -</tr> -<tr> - <td><code>Depletion</code></td> - - <td><code>int</code></td> - - <td>"Intelligent" dot-removal: 0 = none, 1 = 25%, 2 = 50%, 1 best for graphics? Use 0 for transparencies.</td> -</tr> -</table> -</blockquote> - -<h4><a name="HP_PaintJet_properties"></a>PaintJet XL300 / PaintJet XL properties</h4> - -<blockquote> -<table> -<tr> - <th width="20%">Name</th> - <th width="20%">Type</th> - <th width="60%">Comments</th> -</tr> -<tr> - <td><code>PrintQuality</code></td> - - <td><code>int</code></td> - - <td>Mechanical print quality: -1 = fast, 0 = normal, 1 = presentation. Fast mode reduces ink usage and uses single-pass operation for some media types. Presentation uses more ink and the maximum number of passes, giving slowest printing for highest quality</td> -</tr> -<tr> - <td><code>RenderType</code></td> - - <td><code>int</code></td> - - <td><dl> - <dt><dd><code>0 </code>driver does dithering</dd></dt> - <dt><dd><code>1 </code>snap to primaries</dd></dt> - <dt><dd><code>2 </code>snap black to white, others to black</dd></dt> - <dt><dd><code>3 </code>ordered dither</dd></dt> - <dt><dd><code>4 </code>error diffusion</dd></dt> - <dt><dd><code>5 </code>monochrome ordered dither</dd></dt> - <dt><dd><code>6 </code>monochrome error diffusion</dd></dt> - <dt><dd><code>7 </code>cluster ordered dither</dd></dt> - <dt><dd><code>8 </code>monochrome cluster ordered dither</dd></dt> - <dt><dd><code>9 </code>user-defined dither (not supported)</dd></dt> - <dt><dd><code>10 </code>monochrome user-defined dither ns.</dd></dt> - </dl></td> -</tr> -</table> - -<p> -The PaintJet (non-XL) has no additional properties.</p> - -</blockquote> - -<h3><a name="HP_gamma"></a>Gamma correction</h3> - -<p> -One consequence of using Floyd-Steinberg dithering rather than Ghostscript's -default clustered ordered dither is that it is much more obvious that the -ink dots are rather larger on the page than their nominal 1/180-inch or 1/300-inch -size (clustering the dots tends to minimise this effect). Thus it is often -the case that the printed result is rather too dark. A simple empirical -correction for this may be achieved by preceding the actual PostScript -file to be printed by a short file which effectively sets the gamma for -the device, such as</p> - -<blockquote><code> -gs ... gamma.ps colorpic.ps -c quit -</code></blockquote> - -<p> -where <code>gamma.ps</code> is</p> - -<blockquote> -<pre>%! -/.fixtransfer { - currentcolortransfer 4 { - mark exch - dup type dup /arraytype eq exch /packedarraytype eq or - 1 index xcheck and { /exec load } if - 0.333 /exp load - ] cvx 4 1 roll - } repeat setcolortransfer -} bind odef -.fixtransfer -/setpagedevice { setpagedevice .fixtransfer } bind odef</pre> -</blockquote> - -<p> -This does the gamma correction <b><em>after</em></b> whatever correction -the device might be doing already. To do the correction -<b><em>before</em></b> the current correction,</p> - -<blockquote> -<pre>%! -/.fixtransfer { - currentcolortransfer 4 { - mark 0.333 /exp load 4 -1 roll - dup type dup /arraytype eq exch /packedarraytype eq or - 1 index xcheck and { /exec load } if - ] cvx 4 1 roll - } repeat setcolortransfer -} bind odef -.fixtransfer -/setpagedevice { setpagedevice .fixtransfer } bind odef</pre> -</blockquote> - -<p> -This example sets the gamma for R, G, and B to 3, which seems to work -reasonably well in practice.</p> - -<h3><a name="HP_resolution_enhance"></a>HP's resolution-enhanced mode for Inkjet printers</h3> - -<p> -This feature is available on HP's more recent inkjet printers, including -the DeskJet 520 (mono), 540 (mono or colour) and 560C (mono and colour). -The colour and monochrome drivers for the HP DeskJet 550c are (probably) -the best you will get for use with Ghostscript, for the following reasons.</p> - -<p> -These printers do not offer true 600×300dpi resolution. Those that -print in colour are strictly 300×300dpi in colour mode, while in mono -mode there is a pseudo 600×300dpi mode with the restriction that you -can't print two adjacent dots. In effect what you have is 600dpi dot -positioning, but on average you don't get more dots per line. This -provides the possibility, for instance, to have sharper character outlines, -because you can place dots on the edges nearer to their ideal positions. -This is why it is worth doing.</p> - -<p> -However, HP will not support user-level programming of this -resolution-enhanced mode, one reason being that (I understand) all the dot -spacing has to be done by the driver, and if you get it wrong, you can -actually damage the print head.</p> - -<p> -To summarise, you may lose a smidgin of (potential) text clarity using the -550c drivers (<code>cdj550</code>, <code>cdjcolor</code>, -<code>cdjmono</code> etc.), but other than that, they are the ones for -the job.</p> - -<h3><a name="HP_tips"></a>General tips</h3> - -<p> -For all the printers above, the choice of paper is critically important to -the final results. The printer manuals suggest type of paper, but in -general, smoother, less fibrous types give better results. In particular, -the special ink-jet paper can make a big difference: colours are brighter, -but most importantly, there is almost no colour bleed, even with adjacent -areas of very heavy inking. Similarly the special coated transparencies -also work well (and ordinary transparencies do not work at all!).</p> - -<p> -The Unix procedure <a href="Unix-lpr.htm"><code>unix-lpr.sh</code></a> -provides one example of setting up a multi-option colour PostScript -<code>lpr</code> queue on Unix systems, and includes the ability to -choose a range of different colour options and printer accounting and error -logging.</p> - -<p> -<b>Caveat emptor!</b> It is not always easy for me to test all of these -drivers, as the only colour printer I have here is the DeskJet 500C. I rely -on others to test drivers for the additional machines and report their -findings back to me.</p> - -<hr> - -<h2><a name="BJC_8200"></a>Canon BJC-8200 printer</h2> - -<p> -This section was contributed by the author of the <code>uniprint</code> -configuration files for the Canon BJC-8200, Stephan C. Buchert <<a -href="mailto:scb@stelab.nagoya-u.ac.jp">scb@stelab.nagoya-u.ac.jp</a>>. -These files also handle the Japanese Canon F850 printer.</p> -<p> -Warning: Usage of this program is neither supported nor endorsed by -the Canon corporation. Please see the Ghostscript <a -href="Public.htm">license</a> regarding warranty.</p> - -<h3>Introduction</h3> - -<p> -The Canon Bubble Jet printer BJC-8200 is designed for printing digital -photos and halftone images. Software drivers for Windows 95-2000 and Mac are -usually included and can be downloaded from the Canon web sites like -<a href="http://consumer.usa.canon.com/bjc/bjc8200/">http://consumer.usa.canon.com/bjc/bjc8200/</a> -for the US market. If these drivers cannot be used for some reason, then at -present Ghostscript is probably the alternative giving the best results.</p> - -<p> -The BJC-8200 has features not found among the specs of earlier bubble jet -models (except the even more advanced BJC-8500) and is advertised to offer:</p> - -<ol> - -<li>microfine droplet technology;</li> - -<li>support for printing on a new type of paper, Photo Paper Pro;</li> - -<li>a printhead capable of printing up to 1200 DpI;</li> - -<li>individual ink tanks for 6 colors;</li> - -<li>an internal status monitor reporting low ink back to a driver;</li> - -<li>an optional color scanner cartridge for up to 600 DpI resolution.</li> - -</ol> - -<p> -Access to features 5 and 6 requires use of the original Canon drivers for -the foreseeable future. This README is about getting the printer features -1-3 working with Ghostscript. No (re)compilation of Ghostscript is normally -required.</p> - -<p> -Ghostscript comes with a relatively highly configurable driver, called -<a href="#Uniprint">uniprint</a>, for printers which understand raster -images in various propriety formats. Most options for this driver are -usually organized into files having the suffix ".upp." Ghostscript -versions >= 5.10 (or even earlier) include such uniprint control files -for the Canon BJC-610. They work also well for some other Canon Bubble -Jet models, for example for my BJC-35vII. But when using them for a -BJC-8200 the result is unsatisfactory.</p> - -<h3>The uniprint control files for the BJC-8200</h3> - -<p> -After some experimenting with the options for uniprint I have obtained quite -satisfactory prints with my printer(*). This distribution includes six new -uniprint control files:</p> - -<ul> -<li>bj8pp12f.upp</li> -<li>bj8hg12f.upp</li> -<li>bj8gc12f.upp</li> -<li>bj8oh06n.upp</li> -<li>bj8ts06n.upp</li> -<li>bj8pa06n.upp</li> -</ul> - -<p> -They are included in Ghostscript >=6.21. For older versions you can put -them anywhere in the Ghostscript search path (type "gs -h" to see the -path), but should perhaps add the files to the directory with the -other *.upp files. This is "/usr/share/ghostscript/gs6.01/lib" in my -RedHat 6.1 Linux box with Aladdin Ghostscript 6.01. - -<p> -Here is an explanation of my file name convention: the prefix "bj8" should -perhaps be used for the Canon BJC-8200 and compatible (like the Japanese -F850 and perhaps the non-Japanese BJC-8500) models. The next two letters -indicate the print media:</p> - -<ul> -<li>pp "Photo Paper Pro"</li> -<li>hg "High Gloss Photo Film"</li> -<li>gc "Glossy Photo Cards"</li> -<li>oh "OHP transparencies"</li> -<li>ts "T-shirt transfer"</li> -<li>pa "Plain Paper"</li> -</ul> - -<p> -The numbers at positions 6 and 7 indicate the resolution</p> - -<ul> -<li>12 1200x1200 DpIxDpI</li> -<li>06 600x600 DpIxDpI</li> -</ul> - -<p> -The last letter stands for a quality factor that effects also the print -speed (presumably related to the number of passes that the printhead makes). -</p> -<ul> -<li>f highest quality</li> -<li>n normal quality</li> -</ul> - -<p> -Printing a postcard size (~10x15 cm^2) image at 1200x1200 DpI^2 takes about -3 minutes. The output of Ghostscript is then typically 4-5 MByte. The -bootleneck seems to be the transfer of the raster image in run-length -encoded Canon format to the printer (via the parallel port on my system) or -the printer's speed, not Ghostscript or the uniprint renderer.</p> - -<h3>Further Optimization for the Canon BJC-8200</h3> - -<p>So far I have only experimented with the printer initialization code at the -beginning of each page (-dupBeginPageCommand) and the resolution (-r). Other -options, particularly the transfer arrays (-dupBlackTransfer, --dupCyanTransfer, -dupMagentaTransfer, -dupYellowTransfer) and the margins -(-dupMargins) were simply copied from the files for the BJC-610, but they -may need to be changed for optimized performance.</p> - -<p> -Here is information useful for changing or adding uniprint control files for -the BJC-8200:</p> - -<p> -In "-dupBeginPageCommand=..." use the line</p> - -<blockquote> - 1b28 64 0400 04b0 04b0 -</blockquote> - -<p> -for 1200x1200 resolution, and</p> - -<blockquote> - 1b28 64 0400 0258 0258 -</blockquote> - -<p> -for 600x600. The "-r" option in the control file must of course match this -line. Other resolutions might work as well, but I didn't try.</p> - -<p> -Crucial are the numbers in the lines like</p> - -<blockquote><pre> - 1b28 63 0300 3005 04 - ^ ^ - Plain Paper 0 4 Highest quality - OHP transparency 2 . - T-shirt transfer 3 . - Glossy Photo Film 5 . - High Gloss Paper 6 0 Lowest quality - Photo Paper Pro 9 -</pre></blockquote> - -<h3>Outlook</h3> - -<p> -Presently uniprint can use the black (K), cyan (C), magenta (M), and -yellow (Y) colors in the BJC-8200. The unused colors are photo (or -light) cyan (c) and magenta (m). Also the Canon driver seems to use -only CMYK, for example when printing on Photo Paper Pro in "Camera" or -"SuperPhoto" mode. These modes supposedly produce prints of the best -quality that the Canon driver can offer. Other modes of Canon driver -do use up to all six color cartridges (CMYKcm). Therefore expanding -uniprint's capabilities for six colors would be interesting, but it may -not increase the output quality of 6-color printers such as the -BJC-8200 drastically.</p> - -<p> -More control files for uniprint could be added in order to offer more -versatility for controlling the BJC-8200 within a Ghostscript -installation. The number of possible combinations for media type, resolution -and print quality factor is very large, many combinations would not make -much sense, many might be used here and there, but relatively rarely. The -user would have to remember a name for each combination that is used.</p> - -<p> -A better way would be to let the user patch optionally a user owned or -system wide uniprint control file before each print via some print -tool. This is similar to the approach taken by Canon with their driver for -Windows. Similarly a uniprint tool could also incorporate other functions -such as printing test and demo pages and the low ink warning once the -protocol for this is known. Clearly it would be difficult to code such a -uniprint tool for all the platforms where Ghostscript is running.</p> - -<h3>Usage on RedHat Linux</h3> - -<p> -In order to install a BJC-8200 printer on a RedHat Linux system with -RedHat's printtool, you need also to insert with a text editor the contents -of the file <code>bj8.rpd</code> into the RedHat printer database -<code>/usr/lib/rhs/rhs-printfilters/printerdb</code>. Insert it most -appropriately after the section</p> - -<blockquote><pre> -StartEntry: U_CanonBJC610 -. -. -. -EndEntry - -< --- insert here "bj8.rpd" from this distribution: -< --- StartEntry: U_CanonBJC8200 - . - . - . -</pre></blockquote> - -<h3>Contacting the Author</h3> - -<p> -E-mail address: <<a -href="mailto:scb@stelab.nagoya-u.ac.jp">scb@stelab.nagoya-u.ac.jp</a>></p> - -<p> -Footnotes:</p> - -<p> -(*) Actually I have a F850, not a BJC-8200. That model is sold for the -Japanese market only. The specs and also the external look are the -same as those of the BJC-8200 models for the American and European -markets. I expect that the raster image mode which is used exclusively -by Ghostscript is entirely compatible for both models.</p> - -<p> -Stephan C. Buchert</p> - -<hr> - -<h2><a name="BJC"></a>Other Canon BubbleJet (BJC) printers</h2> - -<p> -This section was contributed by the author of the drivers, Yves Arrouye -(<<a href="mailto:yves.arrouye@usa.net">yves.arrouye@usa.net</a>>, but -please do not send questions to him: he no longer maintains these drivers.) -The drivers handle Canon BJC-600, BJC-4xxx, BJC-70, Stylewriter 2x00, and -BJC-800 printers.</p> - -<h3><a name="BJC_history"></a>History</h3> - -<p> -The BJC-600 driver was written in the first place by Yoshio Kuniyoshi and -later modified by Yves Arrouye. We tried to make it evolve synchronously, -though Yoshio cannot be reached since a long time ago. The drivers are -based on code for the HP printers by George Cameron (in fact, they are in -the same file!), so he's the first person to thank.</p> - -<p> -The 2.00 version of the drivers was a complete rewrite of the driver -(arguments, optimization, colour handling, in short: everything!) by Yves -Arrouye. That release was also the first one to be able to use the full -width of an A3 paper size. PostScript Printer Description (PPD) files for -the drivers were released with version 2.15. They are incomplete, -but they can be used to drive the printers' main features.</p> - -<h3><a name="BJC_build"></a>Configuring and building the BJC drivers</h3> - -<h4><a name="BJC_defaults"></a>Modify values in -<code>gdevbjc.h</code></h4> - -<p> -Configure the drivers by modifying the default values in the file -<code>gdevbjc.h</code> or on the compilation line. If you don't do -that, the drivers use reasonable defaults that make them work "as -expected". All default values shown here are defined in that file.</p> - -<h4><a name="BJC_CMYK_RGB"></a>CMYK-to-RGB color conversion</h4> - -<p> -By default, the drivers use the same algorithm as Ghostscript to convert -CMYK colors to RGB. If you prefer to use Adobe formulas, define -<code>USE_ADOBE_CMYK_RGB</code> when compiling. (See the top of the -file <code>gdevcdj.c</code> to see the difference between the two.)</p> - -<h4><a name="BJC_vertical_centering"></a>Vertical centering of the -printable area</h4> - -<p> -The drivers center the imageable area horizontally but not vertically, so -that what can be printed does use the most of the output media. If you -define <code>BJC_DEFAULT_CENTEREDAREA</code> when compiling, then the -top and bottom margins will be the same, resulting in a (smaller) -vertically centered imageable area also.</p> - -<h4><a name="BJC_margins"></a>Page margins</h4> - -<p> -If you define <code>USE_RECOMMENDED_MARGINS</code>, then the top and -bottom margins will be the same (that is, -<code>BJC_DEFAULT_CENTEREDAREA</code> will be defined for you) and the -margins will be the 12.4mm recommended by Canon. Since margins are -complicated (because one must rely on the mechanical precision of the -printer), the drivers do something about the bottom margin: by default the -bottom margin is 9.54mm for the BJC-600 driver and 7mm for the BJC-800. If -you define <code>USE_TIGHT_MARGINS</code>, then the bottom margin is 7mm -for both drivers (but I never managed to get my own BJC-600 to print a line -on this low bound, hence the larger default). Regardless of the presence -of this definition, <code>USE_FIXED_MARGINS</code> will not allow the -BJC-800 to use the lower 7mm bottom margin, so if you have a problem with -the bottom margin on a BJC-800, just define that (without defining -<code>USE_TIGHT_MARGINS</code>, of course).</p> - -<p> -A quick way to be sure the margins you selected is to print a file whose -contents are:</p> - -<blockquote><code> -%!<br> -clippath stroke showpage -</code></blockquote> - -<p> -If the margins are okay, you will get a rectangle visibly surrounding -the printable area. If they're not correct, one or more of the sides will -be either incomplete or completely unprinted.</p> - -<h4><a name="BJC_compile"></a>Makefile and compilation</h4> - -<p> -Make sure the <code>bjc600</code> or <code>bjc800</code> devices are -in <a href="Make.htm#Features_and_devices"><code>DEVICE_DEVS</code> in -the makefile</a>; that is, look in the makefile for your platform and add -them if necessary -- they may already be there. As of Ghostscript 5.10, -for instance, one makefile has</p> - -<blockquote><code> -DEVICE_DEVS6=bj10e.dev bj200.dev bjc600.dev bjc800.dev -</code></blockquote> - -<h3><a name="BJC_usage"></a>Use of the drivers</h3> - -<p> -There are two drivers here. The "<code>bjc600</code>" one supports the BJC-600 and -BJC-4xxx (maybe the BJC-70 as well) and the "<code>bjc800</code>" one supports the -BJC-800 series. Remarks here that apply to both drivers use the name -"bjc".</p> - -<h4><a name="BJC_options"></a>Supported Options and Defaults</h4> - -<p> -Note: "options", "properties", and "parameters" designate the same thing: -device parameters that you can change.</p> - -<p> -Giving an option an incorrect value causes an error. Unless stated -otherwise, this error will be a rangecheckerror. Options may be set from -the Ghostscript command line (using the <code>-d</code> and -<code>-s</code> switches or other predetermined switches if they have an -effect on the driver) or using the PostScript Level 2 -<code>setpagedevice</code> operator if Ghostscript has been compiled -with the <code>level2</code> or <code>level3</code> device (which it should -<code>;-)</code>). There are <b>no</b> special-purpose operators such as -one was able to find in Level 1 printers.</p> - -<p> -The bjc uses 24 bits per pixel by default (unless you change the value of -<code>BJC_BITSPERPIXEL</code>), corresponding to CMYK printing. -Supported modes are 1 bpp and 4 bpp (gray levels), 8 bpp, 16 bpp, 24 bpp -and 32 bpp (colours). Colours are preferably stored in the CMYK model -(which means, for example, that with 16 bpp there are only 16 different -shades of each color) but it is possible to store them as RGB color for -some depths. Some modes do Floyd-Steinberg dithering and some don't, but -use the default Ghostscript halftoning (in fact, when halftoning is used, -dithering takes also place but because of the low point density it is -usually not efficient, and thus invisible).</p> - -<blockquote> - - -<h4>Descriptions of printing modes by bpp and Colors</h4> - - -<table> - -<tr> - <th width="15%">bpp</th> - - <th width="15%">Colors</th> - - <th align="left" width="70%">Mode</th> - </tr> -<tr> - <td>32</td> - - <td align="center">4</td> - - <td>CMYK colour printing, Floyd-Steinberg dithering</td> -</tr> -<tr> - <td>24</td> - - <td align="center">4</td> - - <td>The same. (But each primary colour is stored on 6 bits instead of 8.)</td> -</tr> -<tr> - <td>24</td> - - <td align="center">3</td> - - <td>RGB colour printing, Floyd-Steinberg dithering. This mode does - <code>not</code> use the black cartridge (that's why it - exists, for when you don't want to use it <code>;-)</code>). - Each primary colour is stored in 8 bits as in the 32/4 mode, - but black generation and under-color removal are done on the - driver side and not by Ghostscript, so you have no control over - it. (This mode is no longer supported in this driver.)</td> -</tr> -<tr> - <td>16</td> - - <td align="center">4</td> - - <td>CMYK colour printing, halftoned by Ghostscript. F-S dithering - is still visible here (but the halftone patterns are visible - too!).</td> -</tr> -<tr> - <td>8</td> - - <td align="center">4</td> - - <td>The same.(But each primary colour is stored in 2 bits instead of 4.)</td> -</tr> -<tr> - <td>8</td> - - <td align="center">3</td> - - <td>RGB colour printing. This mode is not intended for use. What I - mean is that it should be used only if you want to use custom - halftone screens <b>and</b> the halftoning is broken using the - 8/4 mode (some versions of Ghostscript have this problem).</td> -</tr> -<tr> - <td>8</td> - - <td align="center">1</td> - - <td>Gray-level printing, Floyd-Steinberg dithering</td> -</tr> -<tr> - <td>1</td> - - <td align="center">1</td> - - <td>Gray-level printing halftoned by Ghostscript</td> - </tr> -</table> -</blockquote> - -<p> -These modes are selected using the <code>BitsPerPixel</code> <b>and</b> -<code>Colors</code> integer options (either from the command line or in -a PostScript program using <code>setpagedevice</code>). See below.</p> - -<p> -A note about darkness of what is printed: Canon printers do print dark, -really. And the Floyd-Steinberg dithering may eventually darken your image -too. So you may need to apply gamma correction by calling Ghostscript as in</p> - -<blockquote><code> -gs -sDEVICE=bjc600 gamma.ps myfile.ps -</code></blockquote> - -<p> -where <code>gamma.ps</code> changes the gamma correction (here to 3 for -all colors); 0.45 gives me good results, but your mileage may vary. The -bigger the value the lighter the output:</p> - -<blockquote><code> -{ 0.45 exp } dup dup currenttransfer setcolortransfer -</code></blockquote> - -<p> -The drivers support printing at 90dpi, 180dpi and 360dpi. Horizontal and -vertical resolutions must be the same or a limitcheck error will happen. A -rangecheck will happen too if the resolution is not -90 ×2^<small><sup><b>N</b></sup></small>. If the driver -is compiled with <code>-DBJC_STRICT</code> a rangecheck also happens if -the resolution is not one of those supported. This is not the case, as we -expect that there may be a 720dpi bjc some day.</p> - -<p> -Here are the various options supported by the bjc drivers, along with -their types, supported values, effects, and usage:</p> - -<dl> - <dt><code>BitsPerPixel</code> (int) - <dd>Choose the depth of the page. Valid values are 1, 8, 16, 24 (the - default) and 32. - -<p> -Note that when this is set for the first time, the <code>Colors</code> -property is automatically adjusted unless it is also specified. The table -here shows the corresponding color models and the rendering method visible: -"GS" for Ghostscript halftoning and "F-S" for Floyd-Steinberg dithering. -When both are present it means that the dithering of halftones is visible. -Default choices are indicated by asterisk "*".</p> - -<blockquote> - <h4>Valid colors values for allowed BitsPerPixel values</h4> -<table> - -<tr> - <th>bpp</th> - <th>Colors</th> - <th>Default</th> - <th>Color model</th> - <th>Dithering</th> -</tr> -<tr> - <td align="center">32</td> - <td align="center">4</td> - <td> </td> - <td>CMYK</td> - <td>F-S</td> -</tr> -<tr> - <td align="center">24</td> - <td align="center">4</td> - <td><b>*</b></td> - <td>CMYK</td> - <td>F-S</td> -</tr> -<tr> - <td> </td> - <td align="center">3</td> - <td> </td> - <td>RGB</td> - <td>F-S</td> -</tr> -<tr> - <td align="center">16</td> - <td align="center">4</td> - <td> </td> - <td>CMYK</td> - <td>GS, F-S</td> - </tr> -<tr> - <td align="center">8</td> - <td align="center">4</td> - <td><b>*</b></td> - <td>CMYK</td> - <td>GS</td> -</tr> -<tr> - <td> </td> - <td align="center">3</td> - <td> </td> - <td>RGB</td> - <td>GS</td> -</tr> -<tr> - <td> </td> - <td align="center">1</td> - <td> </td> - <td>K (CMYK</td> - <td>F-S</td> -</tr> -<tr> - <td align="center">1</td> - <td align="center">1</td> - <td><b>*</b></td> - <td>K (CMYK)</td> - <td>GS</td> -</tr> -</table> -</blockquote> - -<p>Also note that automagical change of one parameter depending on the -other one does not work in a <code>setpagedevice</code> call. This -means that if you want to change <code>BitsPerPixel</code> to a value -whose valid <code>Colors</code> values do not include the actual -<code>Colors</code> value, you must change <code>Colors</code> too.</p> -</dl> - -<dl> -<dt><code>Colors</code> (int) -<dd>Choose the number of color components from among 1, 3 and 4 (the -default). This setting cannot be used in a PostScript program, only on -Ghostscript's command line. See <code>ProcessColorModel</code> below -for what to use to change the number of colors with PostScript code. - -<p> -Note that setting this property does limit the choices of -<code>BitsPerPixel</code>. As for the previous property, its first -setting may induce a setting of the "other value" -(<code>BitsPerPixel</code> here). The table here indicates valid -combinations with "V", default values with asterisk "*".</p> - -<blockquote><table> -<tr> - <th colspan="7">Valid BitsPerPixel values for allowed Colors values</th> -</tr> -<tr> - <td colspan="7" align="right">BitsPerPixel OK values</td> -</tr> -<tr> - <td>Colors</td> - <td>Type</td> - <td>32</td> - <td>24</td> - <td>16</td> - <td>8</td> - <td>1</td> -</tr> -<tr> - <td>4</td> - <td>CMYK</td> - <td><b>V</b></td> - <td><b>*</b></td> - <td><b>V</b></td> - <td><b>V</b></td> - <td></td> -</tr> -<tr> - <td>3</td> - <td>RGB</td> - <td> </td> - <td><b>*</b></td> - <td> </td> - <td><b>V</b></td> - <td> </td> -</tr> -<tr> - <td>1</td> - <td>K</td> - <td> </td> - <td> </td> - <td> </td> - <td><b>V</b></td> - <td><b>*</b></td> -</tr> -</table> -</blockquote> - -<p>Also note that automagical change of one parameter depending on the -other one does not work in a <code>setpagedevice</code> call. This -means that if you want to change <code>Colors</code> to a value whose -valid <code>BitsPerPixel</code> values don't include the actual -<code>BitsPerPixel</code> value, you must change -<code>BitsPerPixel</code> too.</p> -</dl> - -<dl> -<dt><code>ProcessColorModel</code> (symbol)</dt> -<dd>A symbol taken from <code>/DeviceGray</code>, -<code>/DeviceRGB</code> or <code>/DeviceCMYK</code> which can be used -to select 1, 3 or 4 colors respectively. Note that this parameter takes -precedence over <code>Colors</code>, and that both affect the same -variable of the driver. (See <code>Colors</code> above for values -combined with <code>BitsPerPixel</code>.)</dd> -</dl> - -<dl> -<dt><code>HWResolution</code> (floats array)</dt> -<dd>An array of two floats giving the horizontal and vertical resolution in -dots per inch from among 90, 180 and 360 (the default). Both values must -be the same. On the Ghostscript command line, the resolution may be -changed with the <a href="Use.htm#Resolution_switch"><code>-r</code> -switch</a>.</dd> -</dl> - -<dl> -<dt><code>ManualFeed</code> (bool)</dt> -<dd>Indicate that the sheets won't be fed automatically by the printer, -<code>false</code> by default. (Not meaningful on the BJC-600, I fear.)</dd> -</dl> - -<dl> -<dt><code>MediaType</code> (string)</dt> -<dd>The media to print on, chosen from among "<code>PlainPaper</code>", -"<code>CoatedPaper</code>", "<code>TransparencyFilm</code>", -"<code>Envelope</code>", "<code>Card</code>" and -"<code>Other</code>". Default is "<code>PlainPaper</code>". For -"<code>Envelope</code>", "<code>Card</code>" or -"<code>Other</code>" the driver puts the printer into thick mode -automatically regardless of the actual media weight.</dd> -</dl> - -<dl> -<dt><code>MediaWeight</code> (int or null)</dt> -<dd>The weight of the media in grams per square meter. Null (the default) -indicates that the weight is of no importance. If the specified media -weight is greater than 105 (that is, the value of the compilation default -<code>BJC</code>???<code>_MEDIAWEIGHT_THICKLIMIT</code>) then the -printer will be set to use thick paper.</dd> -</dl> - -<dl> -<dt><code>PrintQuality</code> (string)</dt> -<dd>The quality of printing.</p> -<table> -<tr colspan="4"> - <th>Value</th> - <th>bjc600</th> - <th>bjc800</th> - <th>Comments</th> -</tr> -<tr> - <td><code>Low</code></td> - <td> </td> - <td align="center"><b>X</b></td> - <td>Has the effect of making only two printing passes instead of four, so should be twice the speed; known as "CN" (Color Normal) mode</td> -</tr> -<tr> - <td><code>Draft</code></td> - <td align="center"><b>X</b></td> - <td align="center"><b>X</b></td> - <td>Unlights the "HQ" light on a BJC-600</td> -</tr> -<tr> - <td><code>Normal</code></td> - <td align="center"><b>X</b></td> - <td align="center"><b>X</b></td> - <td>Default for both drivers; lights the "HQ" light on a BJC-600</td> -</tr> -<tr> - <td><code>High</code></td> - <td align="center"><b>X</b></td> - <td align="center"><b>X</b></td> - <td>Means 200% black and 100% CMY; lights the "Bk+" light on a BJC-600</td> -</tr> -</table> -</dd> - -</dl> - -<dl> -<dt><code>DitheringType</code> (string) -<dd>Dithering algorithm from between "<code>Floyd-Steinberg</code>" and -"<code>None</code>". "<code>None</code>" is the default for 1/1 print -mode, "<code>Floyd-Steinberg</code>" for other modes. At the moment -this parameter is read-only, though no error is generated if one tries to -change it. This parameter is not of much value at the moment and is here -mainly to reserve the name for future addition of dithering algorithms. -</dl> - -<dl> -<dt><code>PrintColors</code> (int) -<dd>Mask for printing color. If 0, use black for any color; otherwise the -value must be the sum of any of 1 (cyan), 2 (magenta), 4 (yellow) and 8 -(black), indicating which colors will be used for printing. When printing -colour, only colours specified will be printed (this means that some planes -will be missing if a color's value above is omitted). When printing grays, -black is used if it is present in the <code>PrintColors</code>; -otherwise, the image is printed by superimposing each requested color. -</dl> - -<dl> -<dt><code>MonochromePrint</code> (bool) -<dd><b>For <tt>bjc600</tt> only</b>, <code>false</code> by default. -Substitute black for Cyan, Magenta and Yellow when printing -- useful, for -example, to get some monochrome output of a dithered printing This is a -hardware mechanism as opposed to the previous software one. I think that -using this or setting <code>PrintColors</code> to 0 will give the same -results. -</dl> - -<p> -Note that the <code>MediaType</code> and <code>ThickMedia</code> -options will be replaced by the use of the device -<code>InputAttributes</code> and <code>OutputAttributes</code> as -soon as possible. Please note too that the print mode may be reset at the -start of printing, not at the end. This is the expected behaviour. If you -need to reset the printer to its default state, simply print a file that -does just a <code>showpage</code>.</p> - -<h4><a name="BJC_device_info"></a>Device information</h4> - -<p> -Here is other information published by the driver that you will find -in the <code>deviceinfo</code> dictionary.</p> - -<dl> -<dt><code>OutputFaceUp</code> (bool) -<dd>This has the boolean value <code>true</code>, indicating that the -sheets are stacked face up. -</dl> - -<dl> -<dt><code>Version</code> (float) -<dd>In the form <b>M.</b><em>mm</em>pp, where <b>M</b> is the major -version, <em>mm</em> the bjc driver's minor version, and pp the specific -driver minor version (that is, <code>M.</code><em>mm</em> will always be -the same for the <code>bjc600</code> and <code>bjc800</code> -drivers). -</dl> - -<dl> -<dt><code>VersionString</code> (string) -<dd> A string showing the driver version and other indications. At the -moment, things like "a" or "b" may follow the version to indicate alpha or -beta versions. The date of the last change to this version is given in the -form MM/DD/YY (no, it won't adapt to your locale). -</dl> - -<h4><a name="BJC_HW_margins"></a>Hardware margins</h4> - -<p> -The BJC printers have top and bottom hardware margins of 3mm and 7.1mm -respectively (Canon says 7mm, but this is unusable because of the rounding -of paper sizes to PostScript points). The left margin is 3.4mm for A4 and -smaller paper sizes, 6.4mm for U.S. paper sizes, envelopes and cards. It -is 4.0mm for A3 paper on the BJC-800.</p> - -<p> -The maximum printing width of a BJC-600 printer is 203mm. The maximum -printing width of a BJC-800 printer is 289mm on A3 paper, 203mm on -U.S. letter and ISO A4 paper.</p> - -<h4><a name="BJC_PPD"></a>PostScript printer description (PPD) files</h4> - -<p> -The files <code>CBJC600.PPD</code> and <code>CBJC800.PPD</code> (whose -long names are, respectively, <code>Canon_BubbleJetColor_600.ppd</code> -and <code>Canon_BubbleJetColor_800.ppd</code>) are PPD files to drive the -features of the <code>bjc600</code> and <code>bjc800</code> drivers. -They can be used, for example, on NextStep systems (presumably on OpenStep -systems too) and on Unix systems with Adobe's TranScript and -<code>pslpr</code> (not tested). The files are not complete at the -moment. Please note that NextStep's printing interface does not -correctly enforce constraints specified in these files (in UIConstraints -descriptions): you must force yourself to use valid combinations of -options.</p> - -<h4><a name="BJC_PPD_custom"></a>Customizing the PPD files</h4> - -<p> -By default the PPD files are set for U.S. letter size paper, and they use a -normalized transfer function. If you choose to use A4 printing by default, -you must replace "<code>Letter</code>" with "<code>A4</code>" in -these (noncontiguous) lines:</p> - -<blockquote> - [...]<br> -<code>*DefaultPageSize: Letter<br></code> - [...]<br> -<code>*DefaultRegion: Letter<br></code> - [...]<br> -<code>*DefaultImageableArea: Letter</code><br> - [...]<br> -</blockquote> - -<p> -Some versions of Ghostscript have problems with normalized colors, which -makes them add magenta in gray levels. If you experience this problem, -in the PPD file replace the line</p> - -<blockquote><code> -*DefaultTransfer: Normalized -</code></blockquote> - -<p> -with the alternate line</p> - -<blockquote><code> -*DefaultTransfer: Null -</code></blockquote> - -<p> -The "thick media" option is implemented by choosing a value of 120 or 80 -(for thick and thin media respectively) for the <code>MediaWeight</code> -feature of the drivers. If you ever change the threshold for thick media -in the driver code, you may need to change the values in the PPD files too.</p> - -<p> -All customization should be done using the "<code>*Include:</code>" -feature of PPD files so that your local changes will be retained if you -update the PPD files.</p> - -<h3><a name="BJC_bugs"></a>How to report problems</h3> - -<p> -Yves Arrouye no longer maintains this driver, and will not answer questions -about it. If you are posting a question about it in a public form, please -be as descriptive as possible, and please send information that can be used -to reproduce the problem. Don't forget to say which driver you use, and in -what version. Version information can be found in the source code of the -driver or by issuing the following command in a shell:</p> - -<blockquote><code> -echo "currentpagedevice /VersionString get ==" | gs -q -sDEVICE=bjc600 - -</code></blockquote> - -<h3><a name="BJC_acks"></a>Acknowledgements</h3> - -<p> -I am particularly grateful to Yoshio Kuniyoshi <<a -href="mailto:yoshio@nak.math.keio.ac.jp">yoshio@nak.math.keio.ac.jp</a>> -without whom I'd never make these drivers, and also to L. Peter Deutsch, -who answered all my (often silly) questions about Ghostscript's driver -interface.</p> - -<p> -Thanks also to the people who volunteered to beta-test the v2.x BJC -drivers: David Gaudine -<<a href="mailto:david@donald.concordia.ca">david@donald.concordia.ca</a>>, -Robert M. Kenney <<a href="mailto:rmk@unh.edu">rmk@unh.edu</a>>, -James McPherson -<<a href="mailto:someone@erols.com">someone@erols.com</a>> -and Ian Thurlbeck -<<a href="mailto:ian@stams.strath.ac.uk">ian@stams.strath.ac.uk</a>> -(listed alphabetically) were particularly helpful by discovering bugs and -helping find out exact paper margins on printers I don't have access to.</p> - -<p> -And many thanks to Klaus-Gunther Hess -<<a href="mailto:ghess@elmos.de">ghess@elmos.de</a>> for looking -at the dithering code and devising a good CMYK dithering algorithm for the -Epson Stylus Color, which I then adapted to the code of these drivers.</p> - -<hr> - -<h2><a name="STC_epson_stylus"></a>Epson Stylus color printer (see also <code>uniprint</code>)</h2> - -<p> -This section was contributed by Gunther Hess -<<a href="mailto:ghess@elmos.de">ghess@elmos.de</a>>, who also wrote -<code>uniprint</code>, a later set of drivers. You should probably see -the section on <a href="#Uniprint"><code>uniprint</code></a> for whether -it might be better for your uses than this driver.</p> - -<h3><a name="STC_usage"></a>Usage</h3> - -<p> - -This driver is selected with "<code>-sDEVICE=stcolor</code>", producing -output for an Epson Stylus Color at 360dpi resolution by default. But it -can do much more with this printer, and with significantly better quality, -than with the default mode; and it can also produce code for monochrome -versions of the printer. This can be achieved via either command-line -options or Ghostscript input. For convenience a PostScript file is -supplied for use as an initial input file. Try the following command:</p> - -<blockquote> -<code>gs -sDEVICE=stcolor -r</code><b>{Xdpi}</b><code>x</code><b>{Ydpi}</b><code> stcolor.ps</code> <b>{YourFile.ps}</b> -</blockquote> - -<p> -where <b>{Xdpi}</b> is one of 180, 360, or 720 and <b>{Ydpi}</b> is one of -90, 180, 360, or 720. The result should be significantly better. You may -use <code>stcolor.ps</code> with other devices too, but I do not -recommend this, since it does nothing then. <code>stcolor.ps</code> -should be available with binary distributions and should reside in the same -directory as other Ghostscript initialization files or in the same -directory as the files to be printed. Thus if Ghostscript is part of your -printer-spooler, you can insert</p> - -<blockquote><code> -(stcolor.ps) findlibfile { pop run } if pop -</code></blockquote> - -<p> -in files you want to use the improved algorithms. You may want to adapt -<code>stcolor.ps</code> file to your specific needs. The methods and -options for this are described here, but this description is restricted to -Ghostscript options, while their manipulation at the PostScript level is -documented in the material on <a href="Language.htm">the relationship of -Ghostscript and PostScript</a> and in <code>stcolor.ps</code>.</p> - -<h3><a name="STC_options"></a>Options</h3> - -<p> -Now to explain the options (as written on my UNIX system). The order is -somehow related to their use during the printing process:</p> - -<dl> -<dt><code>-dUnidirectional</code> -<dd>Force unidirectional printing, recommended for transparencies -</dl> - -<dl> -<dt><code>-dMicroweave</code> -<dd>Enable the printer's "microweave" feature; see -"<a href="#What_is_weaving">What is weaving?</a>" below. -</dl> - -<dl> -<dt><code>-dnoWeave</code> -<dd>Disable any Weaving (overrides <code>-dMicroweave</code>) -</dl> - -<dl> -<dt><code>-dSoftweave</code> -<dd>Enable the driver's internal weaving. Note that <code>Softweave</code> works <b>only</b> with the original Stylus Color and the PRO-Series. -</dl> - -<dl> -<dt><code>-sDithering=</code><em>{name}</em> -<dd>Select another dithering algorithm (name) from among: -<blockquote> -<table> - - <tr> - <th width="25%">Dithering name</th> - <th width="75%">Comments</th> - </tr> -<tr> - <td><code>gscmyk</code></td> - - <td>fast color output, CMYK process color model (default)</td> -</tr> -<tr> - <td><code>gsmono</code></td> - - <td>fast monochrome output</td> -</tr> -<tr> - <td><code>gsrgb</code></td> - - <td>fast color output, RGB process color model</td> -</tr> -<tr> - <td><code>fsmono</code></td> - - <td>Floyd-Steinberg, monochrome</td> -</tr> -<tr> - <td><code>fsrgb</code></td> - - <td>Floyd-Steinberg, RGB process color model (almost identical to the <code>cdj550</code>/<code>bjc</code> algorithm)</td> -</tr> -<tr> - <td><code>fsx4</code></td> - - <td>Floyd-Steinberg, CMYK process color model (shares code with <code>fsmono</code> and <code>fsrgb</code>, but is algorithmically really bad)</td> -</tr> -<tr> - <td><code>fscmyk</code></td> - - <td>Floyd-Steinberg, CMYK process color model and proper modifications for CMYK</td> -</tr> -<tr> - <td><code>hscmyk</code></td> - - <td>modified Floyd-Steinberg with CMYK model ("hs" stands for "hess" not for "high speed", but the major difference from <code>fscmyk</code> is speed)</td> -</tr> -<tr> - <td><code>fs2</code></td> - - <td>algorithm by Steven Singer (RGB) should be identical to <code>escp2cfs2</code>.</td> -</tr> -</table> -</blockquote> -</dl> - -<dl> -<dt><code>-dBitsPerPixel=</code><em>{1...32}</em> -<dd>number of bits used for pixel storage; the larger the value, the better -the quality -- at least in theory. In <code>fsrgb</code> one can gain -some speed by restricting to 24 bits rather than the default 30. -</dl> - -<dl> -<dt><code>-dFlag0</code> -<dd>causes some algorithms to select a uniform initialisation rather than a -set of random values. May yield a sharper image impression at the cost of -dithering artifacts. (Applies to <code>hscmyk</code> and all fs modes, -except for fs2, which always uses a constant initialization.) -</dl> - -<dl> -<dt><code>-dFlag1</code> ... <code>-dFlag4</code> -<dd>Available for future algorithms. -</dl> - -<dl> -<dt><code>-dColorAdjustMatrix='{</code><em>three, nine, or sixteen -floating-point values</em><code>}'</code> -<dd>This is a matrix to adjust the colors. Values should be between -1.0 -and 1.0, and the number of values depends on the color model the selected -algorithm uses. In RGB and CMYK modes a matrix with 1.0 on the diagonal -produces no transformation. This feature is really required, but I could -not identify a similar feature at the language level, so I implemented it, -but I don't know reasonable values yet. -</dl> - -<dl> -<dt><code>-dCtransfer='{</code><em>float float ...</em><code>}'</code> or -<dt><code>-dMtransfer=</code>..., <code>-dY</code>..., <code>-dK</code>... or -<dt><code>-dRtransfer='{</code><em>float float ...</em><code>}'</code> or -<dt><code>-dG</code>..., <code>-dB</code>... or -<dt><code>-dKtransfer='{</code><em>float float ...</em><code>}'</code> -<dd>Which you use depends on the algorithm, which may be either either -CMYK, RGB or monochrome. The values are arrays of floats in the range from -0 to 1.0, representing the visible color intensity for the device. One may -achieve similar effects with <code>setcolortransfer</code> at the -language level, but this takes more time and the underlying code for the -driver-specific parameters is still required. The size of the arrays is -arbitrary and the defaults are "<code>{0.0 1.0}</code>", which is a -linear characteristic. Most of the code in <code>stcolor.ps</code> are -better transfer arrays. -</dl> - -<dl> -<dt><code>-dKcoding='{</code><em>float...</em><code>}'</code> -<dt><code>-dC</code>..., <code>-dM</code>... etc. -<dd>Arrays between 0.0 and 1.0, controlling the internal coding of the -color values. Clever use of these arrays may yield further enhancements, -but I have no experience yet. (To be discontinued with version 2.x.) -</dl> - -<dl> -<dt><code>-sModel=st800</code> -<dd>Causes output to be suitable for the monochrome Stylus 800 (no weaving, -no color). -</dl> - -<dl> -<dt><code>-sOutputCode=</code><em>{name}</em> -<dd>Can be either "<code>plain</code>", "<code>runlength</code>" or -"<code>deltarow</code>" and changes the ESC/P2 coding technique -used by the driver. The default is to use runlength encoding. -"<code>plain</code>" selects uncompressed encoding and generates -enormous amounts of data. -</dl> - -<dl> -<dt><code>-descp_Band=</code><em>1/8/15/24</em> -<dd>Number of nozzles of scanlines used in printing, Useful only with -<code>-dnoWeave</code>. Larger Values yield smaller code, but this -doesn't increase the printing speed. -</dl> - -<dl> -<dt><code>-descp_Width=</code><em>N</em> -<dd>Number of pixels Printed in each scan Line. (Useful only when tuning -margins; see below) -</dl> - -<dl> -<dt><code>-descp_Height=</code><em>pixels</em> -<dd>Length of the entire page in pixels. (Parameter of -"<code>ESC(C</code>" in default initialization.) -</dl> - -<dl> -<dt><code>-descp_Top=</code><em>scan lines</em> -<dd>Top margin in scan lines. (First parameter of "<code>ESC(c</code>" -in default initialization.) -</dl> - -<dl> -<dt><code>-descp_Bottom=</code><em>scan lines</em> -<dd>Bottom margin in scan lines. (Second parameter of -"<code>ESC(c</code>" in default initialization.) -</dl> - -<dl> -<dt><code>-sescp_Init=</code>"<em>string</em>" -<dd>Override for the initialization sequence. (Must set graphics mode 1 -and units.) -</dl> - -<dl> -<dt><code>-sescp_Release=</code>"<em>string</em>" -<dd>Overrides the release sequence, "<code>ESC @ FF</code>" by -default. -</dl> - -<p> -ESC/P2 allows any resolutions to be valid in theory, but only -<code>-r360x360</code> (the default) and <code>-r720x720</code> (not -on STC-IIs ? and st800) are known to work with most printers.</p> - -<blockquote> -<table> -<tr> - <th colspan="4">Valid option combinations – Stylus I & Pro-Series only</th> - </tr> -<tr> - <td>Resolution</td> - <td><code>escp_Band</code></td> - <td>Weave usable</td> - <td><code>escp_Band</code> &<br>number of passes</td> -</tr> -<tr> - <td>180x90</td> - <td>15</td> - <td><code>noWeave</code></td> - <td> </td> -</tr> -<tr> - <td>180x180</td> - <td>1, 8, 24</td> - <td><code>noWeave</code>, <code>Microweave</code></td> - <td>15/2 <code>SoftWeave</code></td> -</tr> -<tr> - <td>180x360</td> - <td> </td> - <td> </td> - <td>15/4 <code>SoftWeave</code></td> -</tr> -<tr> - <td>180x720</td> - <td> </td> - <td> </td> - <td>15/8 <code>SoftWeave</code></td> -</tr> -<tr> - <td>360x90</td> - <td>15</td> - <td><code>noWeave</code></td> - <td> </td> -</tr> -<tr> - <td>360x180</td> - <td>1, 8, 24</td> - <td><code>noWeave</code>, <code>Microweave</code></td> - <td>15/2 <code>SoftWeave</code></td> -</tr> -<tr> - <td>360x360</td> - <td>1, 8, 24</td> - <td><code>noWeave</code>, <code>Microweave</code></td> - <td>15/4 <code>SoftWeave</code></td> -</tr> -<tr> - <td>360x720</td> - <td> </td> - <td> </td> - <td>15/8 <code>SoftWeave</code></td> -</tr> -<tr> - <td>720x90</td> - <td>15</td> - <td><code>noWeave</code></td> - <td> </td> -</tr> -<tr> - <td>720x180</td> - <td> </td> - <td> </td> - <td>15/2 <code>SoftWeave</code></td> -</tr> -<tr> - <td>720x360</td> - <td> </td> - <td> </td> - <td>15/4 <code>SoftWeave</code></td> -</tr> -<tr> - <td>720x720</td> - <td>1</td> - <td><code>noWeave</code>, <code>Microweave</code></td> - <td>15/8 <code>SoftWeave</code></td> -</tr> -</table> -</blockquote> - -<blockquote> -<b>Beware:</b> there are only few validity checks for parameters. A good -example is <code>escp_Band</code>: if you set this, the driver uses your -value even if the value is not supported by the printer. <b>You asked for -it and you got it!</b> -</blockquote> - -<h3><a name="STC_FAQ"></a>Application note and FAQ</h3> - -<p> -Quite a bunch of parameters. Hopefully you never need any of them, besides -feeding <code>stcolor.ps</code> to Ghostscript in front of your input.</p> - -<p> -After answering some questions over fifty times I prepared a FAQ. Here is -version 1.3 of the FAQ, as of <code>stcolor</code> version 1.20 (for -Ghostscript 3.50).</p> - -<h4><a name="STC_FAQ_A3"></a>Support for A3 paper</h4> - -<p> -Yes, this driver supports the A3-size printer: merely set the required -pagesize and margins. A simple way to do this is to specify the -command-line switch "<code>-sPAPERSIZE=a3</code>" or include the -procedure call "<code>a3</code>" in the PostScript prolog section. To -optimize the printable area or set the proper margins, see the next -paragraph.</p> - -<h4><a name="STC_FAQ_margins"></a>Margins, PageSize</h4> - -<p> -I refuse to add code to <code>stcolor</code> that tries to guess the -proper margins or page size, because I found that such guessing is usually -wrong and needs correction in either the source or the parameters. You can -modify <code>stcolor.ps</code> to do that, however. After the line</p> - -<blockquote><code> -mark % prepare stack for "putdeviceprops" -</code></blockquote> - -<p> -insert these lines, which define page size and margins in points:</p> - -<blockquote> -<pre>/.HWMargins [9.0 39.96 12.6 9.0] % Left, bottom, right, top (1/72") -/PageSize [597.6 842.4] % Paper, including margins (1/72") -/Margins [ % neg. Offset to Left/Top in Pixels - 4 index 0 get STCold /HWResolution get 0 get mul 72 div neg - 5 index 3 get STCold /HWResolution get 1 get mul 72 div neg -]</pre></blockquote> - -<p> -Feel free to change the values of <code>.HWMargins</code> and -<code>PageSize</code> to match your needs; the values given are the -defaults when the driver is compiled with "<code>-DA4</code>". This -option or its omission may cause trouble: the Stylus Color can print up to -exactly 8 inches (2880 pixels) at 360dpi. The remaining paper is the -margin, where the left margin varies only slightly with the paper size, -while the right margin is significantly increased for wider paper, such as -U.S. letter size.</p> - -<p> -<b>Note</b> that if you are using an ISO paper size with a version of -<code>stcolor</code> after 1.20 and compiled without -"<code>-DA4</code>", then the default margin is too large, and you need -to add the proper "<code>.HWMargins</code>" to the command line or to -<code>stcolor.ps</code>.</p> - -<h4><a name="STC_FAQ_II_IIS_1500"></a>Stylus Color II / IIs and 1500</h4> - -<p> -First the good news: the driver can print on the Stylus Color II. -Now the bad news:</p> -<ul> -<li>According to Epson support the driver "abuses" the color -capabilities. (See "Future Plans" for details.)</li> -<li>You need some parameters on the command line (or in -<code>stcolor.ps</code>).</li> -<li>I doubted that it would be usable with the Stylus Color IIs, but -it <b>is</b> usable and suffers from mixing problems!</li> -</ul> - -<p> - -To make things work, you <b>MUST</b> disable the driver's internal -weaving (<code>Softweave</code>), in one of these two ways:</p> - -<blockquote> -<code>gs -dMicroweave</code> ...<br> -<code>gs -dnoWeave -descp_Band=1</code> ... -</blockquote> - -<p> -Version 1.90, current as of Ghostscript 5.10, fixes this bug by new default -behaviour. I experienced significantly increased printing speed with the -second variant on the old Stylus Color, when printing mostly monochrome -data.</p> - -<h3><a name="STC_recommendations"></a>Recommendations</h3> - -<p> -The next section is a contribution from Jason Patterson <jason@reflections.com.au> -who evaluated a previous version (1.17). Ghostscript was invoked as follows:</p> - -<blockquote><dl compact> -<dt><code>gs</code> -<dd><code>-sDEVICE=stcolor -r720x720 --sDithering=</code>... <code>-sOutputFile=escp.out stcolor.ps -whatsoever.ps</code> - -</dl></blockquote> - -<p> -where "..." is the name of the desired algorithm. -<code>stcolor.ps</code> was omitted for the gs-algorithms -(<code>gsmono</code>, <code>gsrgb</code> and <code>gscmyk</code>), -for which it is useless and would not allow the selection of -"<code>gscmyk</code>".</p> - -<h4><a name="STC_dither_experiment"></a>Color dithering experiments with -<code>gdevstc</code> 1.21</h4> - -<p> -Here are data about the EPSON Stylus Color driver's different dithering -methods, based on a little experiment using four good quality scanned -images of quite varied nature, to begin with, a summary of the results of -the four experiments. <b>Sanity note:</b> the results here are from only -four images and a total of 24 printouts (eight on 720dpi paper, sixteen on -plain paper). Your results will almost certainly vary, and your standards -might not be the same as mine, so use these results only as a guide, not as -a formal evaluation.</p> - -<blockquote> -<table> -<tr> - <th colspan="2">Quality of output by method</th> -</tr> -<tr> - <td><code>gsmono</code></td> - <td>Pretty much what you'd expect from a mono ordered pattern. - Looks like what a lot of mono laser printers produce.</td> -</tr> -<tr> - <td><code>fsmono</code></td> - <td>Excellent for monochrome.</td> -</tr> -<tr> - <td><code>gscmyk</code></td> - <td>Not very good, but expected from an ordered pattern.</td> - </tr> -<tr> - <td><code>gsrgb</code></td> - <td>A little better than <code>gscmyk</code>. More consistent - looking.</td> -</tr> -<tr> - <td><code>fs2</code></td> - <td>Good, but not quite as good as <code>fsrgb</code>. Gets the - brightness wrong: too light at 720dpi, too dark at 360dpi.</td> -</tr> -<tr> - <td><code>fsrgb</code></td> - <td>Very good, but a little too dark and has a slight blue tint.</td> -</tr> -<tr> - <td><code>hscmyk</code></td> - <td>Excellent. Slightly better than <code>fsrgb</code> and - <code>fs2</code>. Better than <code>fscmyk</code> on - some images, almost the same on most.</td> -</tr> -<tr> - <td><code>fscmyk</code></td> - <td>Best. Very, very slightly better than <code>hscmyk</code>. - On some images nearly as good as the EPSON demos done with - the MS Windows driver.</td> - </tr> -</table> -</blockquote> - -<blockquote> -<table> -<tr> - <th colspan="2">Overall visual quality (1-10), best to worst</th> -</tr> -<tr> - <td><b>Monochrome</b></td> - <td></td> -</tr> -<tr> - <td><code>fsmono</code></td> - <td><code>******************</code></td> -</tr> -<tr> - <td><code>gsmono</code></td> - <td><code>**********</code></td> -</tr> -<tr> - <td> </td> - <td><code>0 1 2 3 4 5 6 7 8 9 10</code></td> -</tr> -<tr> - <td><b>Colour</b></td> - <td></td> - </tr> -<tr> - <td><code>fscmyk</code></td> - <td><code>*******************</code></td> -</tr> -<tr> - <td><code>hscmyk</code></td> - <td><code>*******************</code></td> -</tr> -<tr> - <td><code>fsrgb</code></td> - <td><code>******************</code></td> -</tr> -<tr> - <td><code>fs2</code></td> - <td><code>*****************</code></td> -</tr> -<tr> - <td><code>gsrgb</code></td> - <td><code>**********</code></td> -</tr> -<tr> - <td><code>gscmyk</code></td> - <td><code>*********</code></td> -</tr> -<tr> - <td> </td> - <td><code>0 1 2 3 4 5 6 7 8 9 10</code></td> -</tr> -</table> -</blockquote> - -<h3><a name="STC_color_transform"></a>Color transformation</h3> - -<p> -In the initial version of the driver distributed with Ghostscript 3.33, the -parameter "<code>SpotSize</code>" was the only way to manipulate the -colors at the driver level. According to the parameters enumerated above, -this has changed significantly with version 1.16 and above as a result an -ongoing discussion about dithering algorithms and "false color" on the -Epson Stylus Color. This initiated the transformation of the -<code>stcolor</code> driver into a framework for different dithering -algorithms, providing a generalized interface to the internal Ghostscript -color models and the other data structures related to Ghostscript drivers.</p> - -<p> -The main thing such a framework should be able to do is to deliver the -values the dithering algorithm needs; and since this directly influences -the optical image impression, this transformation should be adjustable -without the need for recompilation and relinking. In general the process -can be described as follows:</p> - -<blockquote><table> -<tr> - <td colspan="3"><code>ColorAdjustMatrix</code></td> - <td align="center">Coding</td> - <td colspan="3"> </td> - <td align="center">Transfer</td> - <td colspan="3"> </td> -</tr> -<tr> - <td>|</td> - <td align="center">Ghostscript color</td> - <td>|</td> - <td align="center">=></td> - <td>|</td> - <td align="center">Ghostscript raster</td> - <td>|</td> - <td align="center">=></td> - <td>|</td> - <td align="center">Dithering data</td> - <td>|</td> -</tr> -<tr> - <td>|</td> - <td> </td> - <td>|</td> - <td> </td> - <td>|</td> - <td align="center">1/2/4/8/16/32-bit</td> - <td>|</td> - <td> </td> - <td>|</td> - <td> </td> - <td>|</td> -</tr> -<tr> - <td>|</td> - <td align="center">1/3/4 16-bit values</td> - <td>|</td> - <td> </td> - <td>|</td> - <td align="center">1/3/4 values</td> - <td>|</td> - <td> </td> - <td>|</td> - <td align="center">(arbitrary type)</td> - <td>|</td> -</tr> -</table> -</blockquote> - -<p> -Due to the limitations on raster storage, information is lost in the first -transformation step, except for the 16-bit monochrome mode. So any color -adjustment should take place before this step and this is where the optional -<code>ColorAdjustMatrix</code> works.</p> - -<p> -The first transformation step, called "coding", is controlled by the -<code>?coding</code> arrays. The decoding process expands the range of -values expontentially to a larger range than that provided by the initial -Ghostscript color model, and is therefore a reasonable place to make -device- or algorithm-specific adjustments. This is where the -<code>?transfer</code> arrays are used. Array access might be not the -fastest method, but its generality is superior, so this step is always -based upon internally algorithm-specific array access. If 8 bits are stored -per color component and if the algorithm uses bytes too, the second -transformation is included within the first, which saves significant -computation time when printing the data.</p> - -<h3><a name="STC_CAM"></a><code>ColorAdjustMatrix</code></h3> - -<p> -The driver supports different values for <code>ProcessColorModel</code>, -which raises the need for different color adjustments. Here -"<code>CAM</code>" stands for "<code>ColorAdjustMatrix</code>".</p> - -<dl> -<dt><code>DeviceGray</code> (three floats) -<dd><pre>if ((r == g) && (g == b)) - K' = 1.0 - R; -else - K' = 1.0 - CAM[0] * R + CAM[1] * G + CAM[2] * B;</pre> - -<p> -According to the <a href="Drivers.htm">documentation on drivers</a>, the -latter (the "else" clause) should never happen.</p> -</dl> - -<dl> -<dt><code>DeviceRGB</code> (nine floats) -<dd><pre>if((r == g) && (g == b)) - R' = B' = G' = R; -else - R' = CAM[0]*R + CAM[1]*G + CAM[2]*B; - G' = CAM[3]*R + CAM[4]*G + CAM[5]*B; - B' = CAM[6]*R + CAM[7]*G + CAM[8]*B;</pre> - -<p> -The printer always uses four inks, so a special treatment of black is -provided. Algorithms may take special action if R, G, and B are all -equal.</p> -</dl> - -<dl> -<dt><code>DeviceCMYK</code> (sixteen floats) -<dd> -<pre>if((c == m) && (m == y)) - K' = max(C,K); - C' = M' = Y' = 0; -else - K = min(C,M,Y); - if((K > 0) && ColorAdjustMatrix_present) { => UCR - C -= K; - M -= K; - Y -= K; - } - - C' = CAM[ 0]*C + CAM[ 1]*M + CAM[ 2]*Y + CAM[ 3]*K; - M' = CAM[ 4]*C + CAM[ 5]*M + CAM[ 6]*Y + CAM[ 7]*K; - Y' = CAM[ 8]*C + CAM[ 9]*M + CAM[10]*Y + CAM[11]*K; - K' = CAM[12]*C + CAM[13]*M + CAM[14]*Y + CAM[15]*K;</pre> - -<p> -Again we have a special black treatment. "<code>max(C,K)</code>" was introduced -because of a slight misbehaviour of Ghostscript, which delivers -black under certain circumstances as (1,1,1,0). Normally, when -no special black separation and undercolor removal procedures -are defined at the PostScript level, either (C,M,Y,0) or (0,0,0,K) -values are mapped. This would make the extended <code>ColorAdjustMatrix</code> -quite tedious, and so during mapping, black separation is done for -(C,M,Y,0) requests; and if there is a <code>ColorAdjustMatrix</code>, undercolor -removal is used too. In other words the default matrix is:</p> - -<blockquote><table> -<tr> <td>1</td><td>0</td><td>0</td><td>1</td></tr> -<tr> <td>0</td><td>1</td><td>0</td><td>1</td></tr> -<tr> <td>0</td><td>0</td><td>1</td><td>1</td></tr> -<tr> <td>0</td><td>0</td><td>0</td><td>1</td></tr> -</table></blockquote> - -<p> -and it is applied to CMYK values with separated and removed black. Raising -the CMY coefficients while lowering the K coefficients reduces black and -intensifies color. But be careful, because even small deviations from the -default cause drastic changes.</p> -</dl> - -<p> -If no <code>ColorAdjustMatrix</code> is set, the matrix computations are -skipped. Thus the transformation reduces to range inversion in monochrome -mode and black separation in CMYK mode.</p> - -<h3><a name="STC_RGBCMYK_coding"></a>RGB / CMYK coding and transfer, and <code>BitsPerPixel</code></h3> - -<p> -These two (groups of) parameters are arrays of floating-point numbers in -the range 0.0 to 1.0. They control the truncation to the desired number of -bits stored in raster memory (<code>BitsPerPixel</code>) and the ink -density. The "truncation" may become a nonlinear function if any of the -<code>?coding</code> arrays is set. Assume the following Ghostscript -invocation:</p> - -<blockquote><pre>gs -sDEVICE=stcolor -sDithering=fscmyk -dBitsPerPixel=16 \ - -dKcoding='{ 0.0 0.09 0.9 1.0 }' \ - -dMcoding='{ 0.0 0.09 0.9 1.0 }' \ - -dKtransfer='{ 0.0 0.09 0.9 1.0 }' \ - -dYtransfer='{ 0.0 0.09 0.9 1.0 }'</pre> -</blockquote> - -<p> -We may have either or both of <code>?coding</code> and -<code>?transfer</code>, giving four possible combinations. (These four -combinations appear in the given example.) The resulting mapping appears -in the following tables, where except for the internal Indices (4 -components × 4 bits = 16 <code>BitsPerPixel</code>), all values -are normalized to the range 0 to 1. The actual range is 0 to 65535 for the -Ghostscript color and 0 to 16777215 for the ink values delivered to the -<code>fscmyk</code> algorithm. Sorry for the bunch of numbers -following, but you may try this example in conjunction with -<code>stcinfo.ps</code>, which should give you a graphical printout of -the following numbers when you issue a <code>showpage</code> command.</p> - -<blockquote> -<table> -<tr> - <th></th> - <th colspan="3">Cyan</th> - <th colspan="3">Magenta</th> -</tr> -<tr> - <th>CI/15</th> - <th>gs_color_values</th> - <th>CI</th> - <th>Ink</th> - <th>gs_color_values</th> - <th>CI</th> - <th>Ink</th> -</tr> -<tr> - <td align="center">0.000</td> - <td align="center">0.000 - 0.062</td> - <td align="center">0</td> - <td align="center">0.000</td> - <td align="center">-0.123 - 0.123</td> - <td align="center">0</td> - <td align="center">0.000</td> -</tr> -<tr> - <td align="center">0.067</td> - <td align="center">0.063 - 0.125</td> - <td align="center">1</td> - <td align="center">0.067</td> - <td align="center">0.123 - 0.299</td> - <td align="center">1</td> - <td align="center">0.247</td> -</tr> -<tr> - <td align="center">0.133</td> - <td align="center">0.125 - 0.187</td> - <td align="center">2</td> - <td align="center">0.133</td> - <td align="center">0.299 - 0.365</td> - <td align="center">2</td> - <td align="center">0.351</td> -</tr> -<tr> - <td align="center">0.200</td> - <td align="center">0.188 - 0.250</td> - <td align="center">3</td> - <td align="center">0.200</td> - <td align="center">0.365 - 0.392</td> - <td align="center">3</td> - <td align="center">0.379</td> -</tr> -<tr> - <td align="center">0.267</td> - <td align="center">0.250 - 0.312</td> - <td align="center">4</td> - <td align="center">0.267</td> - <td align="center">0.392 - 0.420</td> - <td align="center">4</td> - <td align="center">0.406</td> -</tr> -<tr> - <td align="center">0.333</td> - <td align="center">0.313 - 0.375</td> - <td align="center">5</td> - <td align="center">0.333</td> - <td align="center">0.420 - 0.447</td> - <td align="center">5</td> - <td align="center">0.433</td> -</tr> -<tr> - <td align="center">0.400</td> - <td align="center">0.375 - 0.437</td> - <td align="center">6</td> - <td align="center">0.400</td> - <td align="center">0.447 - 0.475</td> - <td align="center">6</td> - <td align="center">0.461</td> -</tr> -<tr> - <td align="center">0.467</td> - <td align="center">0.438 - 0.500</td> - <td align="center">7</td> - <td align="center">0.467</td> - <td align="center">0.475 - 0.502</td> - <td align="center">7</td> - <td align="center">0.488</td> -</tr> -<tr> - <td align="center">0.533</td> - <td align="center">0.500 - 0.562</td> - <td align="center">8</td> - <td align="center">0.533</td> - <td align="center">0.502 - 0.529</td> - <td align="center">8</td> - <td align="center">0.516</td> -</tr> -<tr> - <td align="center">0.600</td> - <td align="center">0.563 - 0.625</td> - <td align="center">9</td> - <td align="center">0.600</td> - <td align="center">0.529 - 0.557</td> - <td align="center">9</td> - <td align="center">0.543</td> -</tr> -<tr> - <td align="center">0.667</td> - <td align="center">0.625 - 0.687</td> - <td align="center">10</td> - <td align="center">0.667</td> - <td align="center">0.557 - 0.584</td> - <td align="center">10</td> - <td align="center">0.571</td> -</tr> -<tr> - <td align="center">0.733</td> - <td align="center">0.688 - 0.750</td> - <td align="center">11</td> - <td align="center">0.733</td> - <td align="center">0.584 - 0.612</td> - <td align="center">11</td> - <td align="center">0.598</td> -</tr> -<tr> - <td align="center">0.800</td> - <td align="center">0.750 - 0.812</td> - <td align="center">12</td> - <td align="center">0.800</td> - <td align="center">0.612 - 0.639</td> - <td align="center">12</td> - <td align="center">0.626</td> -</tr> -<tr> - <td align="center">0.867</td> - <td align="center">0.813 - 0.875</td> - <td align="center">13</td> - <td align="center">0.867</td> - <td align="center">0.639 - 0.715</td> - <td align="center">13</td> - <td align="center">0.653</td> -</tr> -<tr> - <td align="center">0.933</td> - <td align="center">0.875 - 0.937</td> - <td align="center">14</td> - <td align="center">0.933</td> - <td align="center">0.715 - 0.889</td> - <td align="center">14</td> - <td align="center">0.778</td> -</tr> -<tr> - <td align="center">1.000</td> - <td align="center">0.938 - 1.000</td> - <td align="center">15</td> - <td align="center">1.000</td> - <td align="center">0.889 - 1.111</td> - <td align="center">15</td> - <td align="center">1.000</td> -</tr> -</table> -</blockquote> - -<p> -The difference between cyan and magenta is the presence of a coding array. -The coding process must map a range of color values to each of the sixteen -component indices. If no coding array is given, this is accomplished -by dividing by 4096, equivalent to a right shift by 12 bits. The -final ink density resides in the given interval and moves from the left to -the right side from 0 to 15. For magenta there is a coding array -and the ink value matches the center of the intervals. But the distribution -of the mapped intervals follows the given coding array and is nonlinear in -the linear color space of Ghostscript.</p> - -<p> -Now let us take a look at the case with transfer arrays:</p> - -<blockquote> -<table> -<tr> - <th></th> - <th colspan="3">Yellow</th> - <th colspan="3">Black</th> -</tr> -<tr> - <th>CI/15</th> - <th>gs_color_values</th> - <th>CI</th> - <th>Ink</th> - <th>gs_color_values</th> - <th>CI</th> - <th>Ink</th> -</tr> -<tr> - <td align="center">0.000</td> - <td align="center">0.000 - 0.062</td> - <td align="center">0</td> - <td align="center">0.000</td> - <td align="center">-0.123 - 0.123</td> - <td align="center">0</td> - <td align="center">0.000</td> -</tr> -<tr> - <td align="center">0.067</td> - <td align="center">0.063 - 0.125</td> - <td align="center">1</td> - <td align="center">0.018</td> - <td align="center">0.123 - 0.299</td> - <td align="center">1</td> - <td align="center">0.067</td> -</tr> -<tr> - <td align="center">0.13</td> - <td align="center">0.125 - 0.187</td> - <td align="center">2</td> - <td align="center">0.036</td> - <td align="center">0.299 - 0.365</td> - <td align="center">2</td> - <td align="center">0.133</td> -</tr> -<tr> - <td align="center">0.200</td> - <td align="center">0.188 - 0.250</td> - <td align="center">3</td> - <td align="center">0.054</td> - <td align="center">0.365 - 0.392</td> - <td align="center">3</td> - <td align="center">0.200</td> -</tr> -<tr> - <td align="center">0.267</td> - <td align="center">0.250 - 0.312</td> - <td align="center">4</td> - <td align="center">0.072</td> - <td align="center">0.392 - 0.420</td> - <td align="center">4</td> - <td align="center">0.267</td> -</tr> -<tr> - <td align="center">0.333</td> - <td align="center">0.313 - 0.375</td> - <td align="center">5</td> - <td align="center">0.090</td> - <td align="center">0.420 - 0.447</td> - <td align="center">5</td> - <td align="center">0.333</td> -</tr> -<tr> - <td align="center">0.400</td> - <td align="center">0.375 - 0.437</td> - <td align="center">6</td> - <td align="center">0.252</td> - <td align="center">0.447 - 0.475</td> - <td align="center">6</td> - <td align="center">0.400</td> -</tr> -<tr> - <td align="center">0.467</td> - <td align="center">0.438 - 0.500</td> - <td align="center">7</td> - <td align="center">0.414</td> - <td align="center">0.475 - 0.502</td> - <td align="center">7</td> - <td align="center">0.467</td> -</tr> -<tr> - <td align="center">0.533</td> - <td align="center">0.500 - 0.562</td> - <td align="center">8</td> - <td align="center">0.576</td> - <td align="center">0.502 - 0.529</td> - <td align="center">8</td> - <td align="center">0.533</td> -</tr> -<tr> - <td align="center">0.600</td> - <td align="center">0.563 - 0.625</td> - <td align="center">9</td> - <td align="center">0.738</td> - <td align="center">0.529 - 0.557</td> - <td align="center">9</td> - <td align="center">0.600</td> -</tr> -<tr> - <td align="center">0.667</td> - <td align="center">0.625 - 0.687</td> - <td align="center">10</td> - <td align="center">0.900</td> - <td align="center">0.557 - 0.584</td> - <td align="center">10</td> - <td align="center">0.667</td> -</tr> -<tr> - <td align="center">0.733</td> - <td align="center">0.688 - 0.750</td> - <td align="center">11</td> - <td align="center">0.920</td> - <td align="center">0.584 - 0.612</td> - <td align="center">11</td> - <td align="center">0.733</td> -</tr> -<tr> - <td align="center">0.800</td> - <td align="center">0.750 - 0.812</td> - <td align="center">12</td> - <td align="center">0.940</td> - <td align="center">0.612 - 0.639</td> - <td align="center">12</td> - <td align="center">0.800</td> -</tr> -<tr> - <td align="center">0.867</td> - <td align="center">0.813 - 0.875</td> - <td align="center">13</td> - <td align="center">0.960</td> - <td align="center">0.639 - 0.715</td> - <td align="center">13</td> - <td align="center">0.867</td> -</tr> -<tr> - <td align="center">0.933</td> - <td align="center">0.875 - 0.937</td> - <td align="center">14</td> - <td align="center">0.980</td> - <td align="center">0.715 - 0.889</td> - <td align="center">14</td> - <td align="center">0.933</td> -</tr> -<tr> - <td align="center">1.000</td> - <td align="center">0.938 - 1.000</td> - <td align="center">15</td> - <td align="center">1.000</td> - <td align="center">0.889 - 1.111</td> - <td align="center">15</td> - <td align="center">1.000</td> -</tr> -</table> -</blockquote> - -<p> -Yellow uses a transfer array. There is no linear correspondence between -the color and the ink values: this correspondence is defined through the -given array. In other words, the transfer arrays define a nonlinear ink -characteristic, which is exactly the same functionality that PostScript's -"(color)transfer" function provides.</p> - -<p> -While for yellow the intervals match the intervals used with cyan, for -black the intervals match the magenta intervals. But watch the -correspondence between the CI/15 values and the ink density for black: this -is a linear distribution in the ink domain.</p> - -<p> -Not a bad idea, I think. Consider the <code>fs2</code> algorithm: it -uses values in the range 0 to 255. If any transfer array were alone, some -of the 256 possible values would never be used and others would be used for -adjacent intervals several times. Establishing an identical coding array -solves this problem, so the full potential of the algorithm is used.</p> - -<p> -Another useful feature of the coding arrays is that they are internally -normalized to the range 0-1. In 720x720dpi mode the transfer arrays in -<code>stcolor.ps</code> limit the dot density to about 50%, so these -arrays end at 0.5 (and begin at 0.5 for RGB). Because of automatic -normalization, these arrays can also be used as coding arrays. But of -course in the <code>fs2</code> case mentioned above, values from 0 to -127 will never be delivered to the algorithm, while values 128-255 are -delivered for adjacent intervals.</p> - -<p> -To clarify the intended use of the three parameters (parameter groups), keep this in mind:</p> - -<blockquote><ul> -<li><code>ColorAdjustMatrix</code> is never used when transferring gray -values. This restricts it to what the name says: adjustment of colors, -that is, correction for miscolored ink. Do not use it for saturation or -brightness control.</li> - -<li><code>?transfer</code> arrays control the values delivered to the -driver, which in turn controls the ink quantity. Use these arrays to -control saturation and brightness. In general these arrays are identical -for all inks. If they differ they provide a simpler scheme for color -correction, which is not necessarily faster than the -<code>ColorAdjustMatrix</code>.</li> - -<li><code>?coding</code> arrays control the color value intervals mapped -to the internal color indices.</li> -</ul></blockquote> - -<h3><a name="What_is_weaving"></a>What is weaving?</h3> - -<p> -The Epson Stylus Color has a head assembly that contains two physically -identifiable heads, one for black and one for cyan, magenta, and yellow -(CMY). This makes four "logical" heads, one for each color component. -Each of these four heads has several jets at some vertical (Y) distance -from one another, so several horizontal lines can be printed of a given -color during one pass of the heads. From experience I think there are -fifteen jets per color, spaced at 1/90in.</p> - -<p> -So the question arises of how to print at a Y resolution of 360dpi with -90dpi jets. Simply by division one gets 360dpi/90dpi = 4, which tells us -that 4 passes of the head assembly are needed to achieve a Y resolution of -360dpi.</p> - -<p> -Weaving is the method of how the fifteen jets are used to print adjacent -horizontal rows separated here by 1/360 inch:</p> - -<blockquote> -<table> -<tr> - <th colspan="10">Print-head jets used with and without weaving</th> -</tr> -<tr> - <th></th> - <th></th> - <th colspan="4">Weaving</th> - <th colspan="4">noWeave</th> -</tr> -<tr> - <td></td> - <td>Pass</td> - <td>1</td> - <td>2</td> - <td>3</td> - <td>4</td> - <td>1</td> - <td>2</td> - <td>3</td> - <td>4</td> -</tr> -<tr> - <td colspan="10">Row</td> -</tr> -<tr> - <td align="center">0</td> - <td></td> - <td align="center">jet 0</td> - <td align="center">--</td> - <td align="center">--</td> - <td align="center">--</td> - <td align="center">jet 0</td> - <td align="center">--</td> - <td align="center">--</td> - <td align="center">--</td> -</tr> -<tr> - <td align="center">1</td> - <td></td> - <td align="center">--</td> - <td align="center">jet 1</td> - <td align="center">--</td> - <td align="center">--</td> - <td align="center">--</td> - <td align="center">jet 0</td> - <td align="center">--</td> - <td align="center">--</td> -</tr> -<tr> - <td align="center">2</td> - <td></td> - <td align="center">--</td> - <td align="center">--</td> - <td align="center">jet 2</td> - <td align="center">--</td> - <td align="center">--</td> - <td align="center">--</td> - <td align="center">jet 0</td> - <td align="center">--</td> -</tr> -<tr> - <td align="center">3</td> - <td></td> - <td align="center">--</td> - <td align="center">--</td> - <td align="center">--</td> - <td align="center">jet 3</td> - <td align="center">--</td> - <td align="center">--</td> - <td align="center">--</td> - <td align="center">jet 0</td> -</tr> -<tr> - <td align="center">4</td> - <td></td> - <td align="center">jet 1</td> - <td align="center">--</td> - <td align="center">--</td> - <td align="center">--</td> - <td align="center">jet 1</td> - <td align="center">--</td> - <td align="center">--</td> - <td align="center">--</td> -</tr> -<tr> - <td align="center">5</td> - <td></td> - <td align="center">--</td> - <td align="center">jet 2</td> - <td align="center">--</td> - <td align="center">--</td> - <td align="center">--</td> - <td align="center">jet 1</td> - <td align="center">--</td> - <td align="center">--</td> -</tr> -<tr> - <td align="center">6</td> - <td></td> - <td align="center">--</td> - <td align="center">--</td> - <td align="center">jet 3</td> - <td align="center">--</td> - <td align="center">--</td> - <td align="center">--</td> - <td align="center">jet 1</td> - <td align="center">--</td> -</tr> -<tr> - <td colspan="10">...</td> -</tr> -</table> -</blockquote> - -<p> -Now let's assume that the dot diameter is different for each individual -jet, but the average among the jets matches the desired resolution. With -weaving, adjacent rows are printed by different jets, thus some averaging -takes place. Without weaving, adjacent rows are printed by the same jet -and this makes the dot diameter deviations visible as 1/90in stripes on -the paper.</p> - -<h3><a name="STC_print_modes"></a>Print mode parameters</h3> - -<p> -The parameters "<code>Unidirectional</code>", -"<code>Microweave</code>", "<code>noWeave</code>", -"<code>OutputCode</code>", "<code>Model</code>" and the given -resolution control the data generated for the printer.</p> - -<h4><a name="STC_unidirectional"></a><code>Unidirectional</code></h4> - -<p> -Simply toggles the unidirectional mode of the printer. Setting -"<code>Unidirectional</code>" definitely slows printing speed, but may -improve the quality. I use this for printing transparencies, where fast -head movement could smear the ink.</p> - -<h4><a name="STC_noweave"></a><code>Microweave</code>, -<code>noWeave</code> and <code>OutputCode=deltarow</code></h4> - -<p> -The first are two booleans, which implies that four combinations are -possible. Actually only three exist (if you don't count for -<code>deltarow</code>): <code>Softweave</code>, -<code>Microweave</code>, and <code>noWeave</code>. The first and -second are functionally identical, the difference being whether the driver -or the printer does the job.</p> - -<p> -In the default <code>Softweave</code> mode the driver sends the data -properly arranged to the printer, while in <code>Microweave</code> mode, -it is the printer that arranges the data. But in general the host processor -is much faster than the printer's processor, and thus it is faster for the -host do the job. In addition to that, for 720dpi eight passes are -required, and the amount of buffer space needed to buffer the data for the -passes is far beyond the printer's memory. <code>Softweave</code> -requires an odd value of "<code>escp_Band</code>"; the Stylus Color -provides fifteen for that.</p> - -<p> -"<code>OutputCode</code>" controls the encoding used. In the basic -modes, the choice consists of "plain" and "runlength". The computation of -runlength-encoded data does not take much time, less than the data tranfer -to the printer; thus this is the recommended mode, and of course the -default. With the Stylus Color, Epson introduced some new encoding -principles, namely "tiff" and "deltarow". While the first was omitted from -this driver for lack of apparent advantages, "<code>deltarow</code>" is -available as an option. "<code>Softweave</code>" cannot be used with -this encoding, so if <code>OutputCode=deltarow</code> is set, -<code>Microweave</code> becomes the default. Maybe that the size of the -ESC/P2 code becomes smaller, but I have never observed faster printing -speed. Things tend to become slower with <code>deltarow</code> compared -to <code>Softweave</code>.</p> - -<h4><a name="STC_model"></a><code>Model</code></h4> - -<p> -Some ESC/P2 printers such as the Stylus 800 do not offer -<code>Microweave</code> or the commands required to do -<code>Softweave</code>. Setting <code>Model</code> just changes the -defaults and omits some parts of the initialization sequence which are not -compatible with the given printer model. Currently only -"<code>st800</code>" is supported besides the default -<code>stcolor</code>.</p> - -<h3><a name="STC_Pitfalls"></a>Bugs and pitfalls</h3> - -<ul> -<li>The given <code>?coding</code> and <code>?transfer</code> arrays -should be strictly monotonic.</li> - -<li>It is impossible to change <code>WHITE</code>: that's your paper. -Thus RGB transfer should end at 1.0 and CMYK transfer should start at 0.0.</li> - -<li>Usually 8 bits per component yields fastest operation.</li> - -<li>The <code>ColorAdjustMatrix</code> is not used in the reverse -transformation used when Ghostscript does the dithering -(<code>gs</code>* modes). Expect funny results.</li> - -<li>If <code>BitsPerPixel</code> is less than 6, the entire coding and -transfer process does not work. This is always true for the -<code>gs</code>* modes and becomes true for the other modes if -<code>BitsPerPixel</code> is forced to low values.</li> - -<li>720×720dpi printing should never select the <code>gs</code>* -modes and should always use <code>stcolor.ps</code>. (I prefer -360×720.)</li> -</ul> - -<h3><a name="STC_Tests"></a>Tests</h3> - -<p> -This section gives an overview of performance in terms of processing and -printing times, from tests run after version 1.13. Printing was done -offline (simply copying a processed file to the printer) to measure real -printing speed without regard to speed of processing on the host, since at -high resolutions, processing time is the same order of magnitude and thus -may become the limiting factor.</p> - -<h4><a name="STC_OutputCodes"></a>The various OutputCodes</h4> - -<p> -I ran several files though Ghostscript and recorded the size of the -resulting print code, the processing time, and the printing time, at least -for some of the files, always using these options:</p> - -<blockquote><code> -gs -sDEVICE=stcolor -sPAPERSIZE=a4 stcolor.ps - < file.ps -</code></blockquote> - -<p> -(Actually "<code>-sPAPERSIZE=a4</code>" is in my -<code>gs_init.ps</code> since I'm a germ.)</p> - -<p>"<code>deltarow</code>" is the new encoding principle -("<code>ESC . 3 10 10 1</code>") with -<code>Microweave</code> on. It is activated with -"<code>-sOutputCode=deltarow</code>".</p> - -<p>"<code>Softweave</code>" actually means that nothing else was used: -it is the default, and implies that odd v=40/h=10/m=15 mode -("<code>ESC . 1 40 10 15</code>").</p> - -<p>"<code>Microweave</code>" means "<code>-dMicroweave</code>", -equivalent to "<code>ESC . 1 10 10 1</code>", -with full skip optimization and microweave activated.</p> -<p> Finally I wanted to see the plain Kathy Ireland, and used - "<code>-sOutputCode=plain</code>", which just replaces runlength - encoding (RLE) by no encoding, thus using - "<code>ESC . 0 40 10 15</code>". [So sorry <code>;-)</code> Kathy was still dressed in blue in front of the blue - sea on a blue air cushion – nice to see but hard to dither.]</p> -<p> -So here are the results.</p> - -<blockquote> -<table> -<tr> - <th colspan="5">File sizes and printing speeds with various weaving methods</th> -</tr> -<tr> - <td> </td> - <td><code>golfer.ps</code></td> - <td><code>colorcir.ps</code></td> - <td><code>drawing.ps</code></td> - <td><code>brief.ps</code></td> -</tr> -<tr> - <td><code>deltarow</code></td> - <td>572751/48.180u</td> - <td>643374/41.690u</td> - <td>90142/46.180u/1:50</td> - <td>178563/49.350u/2:22</td> -</tr> -<tr> - <td><code>Softweave</code></td> - <td>559593/46.810u</td> - <td>669966/44.960u</td> - <td>296168/48.160u/1:30</td> - <td>269808/43.320u/1:55</td> -</tr> -<tr> - <td><code>Microweave</code></td> - <td>590999/56.060u</td> - <td>754276/42.890u</td> - <td>338885/47.060u/1:50</td> - <td>282314/44.690u/2:22</td> -</tr> -</table> -</blockquote> - -<blockquote> -<table> -<tr> - <th colspan="2">Kathy Ireland</th> -</tr> -<tr> - <td></td> - <td><code>kathy.ps</code></td> -</tr> -<tr> - <td><code>deltarow</code></td> - <td>3975334/111.940u/5:35</td> -</tr> -<tr> - <td><code>Softweave</code></td> - <td>3897112/101.940u/3:10</td> -</tr> -<tr> - <td><code>Microweave</code></td> - <td>4062829/100.990u/3:15</td> -</tr> -<tr> - <td><code>plain/soft</code></td> - <td>5072255/104.390u/3:05</td> -</tr> -</table> -</blockquote> - -<p> -It may be that I've not chosen the optimal <code>deltarow</code> code, -but even if it saves at lot of bytes, printing-speed is not increased.</p> - -<p> -At least the printer prefers plain Kathy. In other words, sending 1 -Megabyte or 20% more data has no impact on printing speed. -<code>drawing.ps</code> is an exception to this rule: plain prints -slower than RLE.</p> - -<p> -"Unclever" coding -- especially with <code>deltarow</code> -- can -significantly slow down printing. But even if very significant advantages -in the size of the code are achieved, "<code>deltarow</code>" is not -competitive. <code>colorcir.ps</code> shows savings with -<code>deltarow</code>, but printing is a mess.</p> - -<h4><a name="STC_printing_time"></a>Printing time related to other options</h4> - -<p> -Full page halftone images printed, unless otherwise noted.</p> - -<blockquote> -<table> -<tr> - <th colspan="6">Printing time related to other options</th> -</tr> -<tr> - <th align="right">dpi</th> - <th align="right">Print mode</th> - <th align="right">Size KB</th> - <th align="right">Time</th> - <th colspan="2" align="left">Comments</th> -</tr> -<tr> - <td align="right">180x180 mono</td> - <td align="right">-/uni</td> - <td align="right">358</td> - <td align="right">1:15</td> - <td colspan="2"> </td> -</tr> -<tr> - <td> </td> - <td align="right">-/bi</td> - <td align="right">358</td> - <td align="right">0:45</td> - <td colspan="2"> </td> -</tr> -<tr> - <td> </td> - <td align="right">micro/bi</td> - <td align="right">205</td> - <td align="right">0:45</td> - <td colspan="2">Not Weaving</td> -</tr> -<tr> - <td> </td> - <td align="right">soft/bi</td> - <td align="right">179</td> - <td align="right">1:25</td> - <td colspan="2"> </td> -</tr> -<tr> - <td align="right">color</td> - <td align="right">-/bi</td> - <td align="right">641</td> - <td align="right">2:45</td> - <td colspan="2"> </td> -</tr> -<tr> - <td> </td> - <td align="right">soft/bi</td> - <td align="right">556</td> - <td align="right">1:32</td> - <td colspan="2"> </td> -</tr> -<tr> - <td align="right">360x360 mono</td> - <td align="right">-/uni</td> - <td align="right">269</td> - <td align="right">0:50</td> - <td colspan="2">Monochrome text</td> -</tr> -<tr> - <td> </td> - <td align="right">-/bi</td> - <td align="right">269</td> - <td align="right">0:35</td> - <td colspan="2">Monochrome text</td> -</tr> -<tr> - <td> </td> - <td align="right">micro/bi</td> - <td align="right">269</td> - <td align="right">2:25</td> - <td colspan="2">Monochrome text</td> -</tr> -<tr> - <td> </td> - <td align="right">soft/uni</td> - <td align="right">250</td> - <td align="right">3:15</td> - <td colspan="2">Monochrome text</td> -</tr> -<tr> - <td> </td> - <td align="right">soft/bi</td> - <td align="right">250</td> - <td align="right">1:55</td> - <td colspan="2">Monochrome text</td> -</tr> -<tr> - <td align="right">color</td> - <td align="right">-/bi</td> - <td align="right">346</td> - <td align="right">1:00</td> - <td colspan="2">Sparse-color page, visible displacements</td> -</tr> -<tr> - <td> </td> - <td align="right">micro/bi</td> - <td align="right">346</td> - <td align="right">1:50</td> - <td colspan="2">Sparse-color page, looks buggy – printer?</td> -</tr> -<tr> - <td> </td> - <td align="right">soft/bi</td> - <td align="right">294</td> - <td align="right">1:30</td> - <td colspan="2">Sparse-color page, O.K.</td> -</tr> -<tr> - <td> </td> - <td align="right">-/bi</td> - <td align="right">2218</td> - <td align="right">2:45</td> - <td colspan="2">Visible stripes</td> -</tr> -<tr> - <td> </td> - <td align="right">micro/bi</td> - <td align="right">5171</td> - <td align="right">3:17</td> - <td colspan="2"> </td> -</tr> -<tr> - <td> </td> - <td align="right">soft/bi</td> - <td align="right">3675</td> - <td align="right">3:05</td> - <td colspan="2"> </td> -</tr> -<tr> - <td align="right">360x720 mono</td> - <td align="right">soft/bi</td> - <td align="right">2761</td> - <td align="right">5:40</td> - <td colspan="2"> </td> -</tr> -<tr> - <td align="right">color</td> - <td align="right">soft/bi</td> - <td align="right">7789</td> - <td align="right">6:15</td> - <td colspan="2">Just a small difference!</td> -</tr> -<tr> - <td align="right">720x360 color</td> - <td align="right">soft/bi</td> - <td align="right">7182</td> - <td align="right">5:40</td> - <td colspan="2"> </td> -</tr> -<tr> - <td align="right">720x720 color</td> - <td align="right">micro/bi</td> - <td align="right">14748</td> - <td align="right">30:26</td> - <td colspan="2">Actually beyond printer's capabilities</td> -</tr> -<tr> - <td> </td> - <td align="right">soft/bi</td> - <td align="right">14407</td> - <td align="right">11:08</td> - <td colspan="2"> </td> -</tr> -</table> -</blockquote> - -<h3><a name="STC_acks"></a>Acknowledgments</h3> - -<p> -This driver was copied from <code>gdevcdj.c</code> (Ghostscript 3.12), -which was contributed by George Cameron, Koert Zeilstra, and Eckhard -Rueggeberg. Some of the ESC/P2 code was drawn from Richard Brown's -<code>gdevescp.c</code>. The POSIX interrupt code (compilation option -<code>-DSTC_SIGNAL</code>) is from Frederic Loyer. Several improvements -are based on discussions with Brian Converse, Bill Davidson, Gero Guenther, -Jason Patterson, ? Rueschstroer, and Steven Singer.</p> - -<p> -While I wish to thank everyone mentioned above, they are by no means -responsible for bugs in the stcolor driver -- just for the features.</p> - -<address> -Gunther Hess<br> -Richard Wagner Strasse 112<br> -D-47057 Duisburg<br> -Germany<br> -+49 203 376273 telephone (MET evening hours)<br> -<<a href="mailto:ghess@elmos.de">ghess@elmos.de</a>> -</address> - -<hr> - -<h2><a name="Uniprint"></a>uniprint, a flexible unified printer driver</h2> - -<p> -<code>uniprint</code> is a unified parametric driver by Gunther Hess -<<a href="mailto:ghess@elmos.de">ghess@elmos.de</a>> for several -kinds of printers and devices, including</p> - -<blockquote> -<ul> -<li>any Epson Stylus Color, Stylus, or Stylus Pro</li> -<li>HP PCL/RTL</li> -<li>Canon BubbleJet Color 610</li> -<li>NEC P2X</li> -<li>Sun raster file format</li> -</ul></blockquote> - -<p> -This driver is intended to <em>become</em> a unified printer driver. If you -consider it ugly, please send me your suggestions for improvements. The -driver will be updated with them. Thus the full explanation of the driver's -name is:</p> - -<blockquote> -Ugly- -> Updated- -> Unified Printer Driver -</blockquote> - -<p> -But you probably want to know something about the functionality. -At the time of this writing uniprint drives:</p> - -<ul> -<li>NEC Pinwriter P2X (24-pin monochrome impact printer, ESC/P style)</li> -<li>Several Epson Stylus Color models (ESC/P2 style)</li> -<li>HP-DeskJet 550c (basic HP-RTL)</li> -<li>Canon BJC 610</li> -</ul> - -<p> -It can be configured for various other printers without recompilation -and offers uncompressed (ugly) Sun rasterfiles as another format, but -this format is intended for testing purposes rather than real use. -The usage of this driver is quite simple. The typical command line looks -like this:</p> - -<blockquote> -<code>gs @</code>{MODEL}<code>.upp -sOutputFile=</code>{printable file}<code> MyFile.ps -c quit</code> -</blockquote> - -<p> -For example, from my Linux box:</p> - -<blockquote><code> -gs @stc.upp -sOutputFile=/dev/lp1 tiger.eps -c quit -</code></blockquote> - -<blockquote> -<table> -<tr> - <th colspan="3">Unified Printer Parameter files distributed with Ghostscript</th> -</tr> -<tr> - <th align="left" colspan="3">Canon BJC 610 (color, rendered)</th> -</tr> -<tr> - - <td><code>bjc610a0.upp</code></td> - - <td>360×360dpi</td> - - <td>plain paper, high speed</td> -</tr> -<tr> - - <td><code>bjc610a1.upp</code></td> - - <td>360×360dpi</td> - - <td>plain paper</td> -</tr> -<tr> - - <td><code>bjc610a2.upp</code></td> - - <td>360×360dpi</td> - - <td>coated paper</td> -</tr> -<tr> - - <td><code>bjc610a3.upp</code></td> - - <td>360×360dpi</td> - - <td>transparency film</td> -</tr> -<tr> - - <td><code>bjc610a4.upp</code></td> - - <td>360×360dpi</td> - - <td>back print film</td> -</tr> -<tr> - - <td><code>bjc610a5.upp</code></td> - - <td>360×360dpi</td> - - <td>fabric sheet</td> -</tr> -<tr> - - <td><code>bjc610a6.upp</code></td> - - <td>360×360dpi</td> - - <td>glossy paper</td> -</tr> -<tr> - - <td><code>bjc610a7.upp</code></td> - - <td>360×360dpi</td> - - <td>high gloss film</td> -</tr> -<tr> - - <td><code>bjc610a8.upp</code></td> - - <td>360×360dpi</td> - - <td>high resolution paper</td> -</tr> -<tr> - <th colspan="3"></th> -</tr> -<tr> - - <td><code>bjc610b1.upp</code></td> - - <td>720×720dpi</td> - - <td>plain paper</td> -</tr> -<tr> - - <td><code>bjc610b2.upp</code></td> - - <td>720×720dpi</td> - - <td>coated paper</td> -</tr> -<tr> - - <td><code>bjc610b3.upp</code></td> - - <td>720×720dpi</td> - - <td>transparency film</td> -</tr> -<tr> - - <td><code>bjc610b4.upp</code></td> - - <td>720×720dpi</td> - - <td>back print film</td> -</tr> -<tr> - - <td><code>bjc610b6.upp</code></td> - - <td>720×720dpi</td> - - <td>glossy paper</td> -</tr> -<tr> - - <td><code>bjc610b7.upp</code></td> - - <td>720×720dpi</td> - - <td>high-gloss paper</td> -</tr> -<tr> - - <td><code>bjc610b8.upp</code></td> - - <td>720×720dpi</td> - - <td>high resolution paper</td> -</tr> -<tr> - <th align="left" colspan="3">HP Ink-Printers</th> -</tr> -<tr> - - <td><code>cdj550.upp</code></td> - - <td>300×300dpi</td> - - <td>32-bit CMYK</td> -</tr> -<tr> - - <td><code>cdj690.upp</code></td> - - <td>300×300dpi</td> - - <td>Normal mode</td> -</tr> -<tr> - - <td><code>cdj690ec.upp</code></td> - - <td>300×300dpi</td> - - <td>Economy mode</td> -</tr> -<tr> - - <td><code>dnj750c.upp</code></td> - - <td>300×300dpi</td> - - <td>Color – also good for 450C</td> -</tr> -<tr> - - <td><code>dnj750m.upp</code></td> - - <td>600×600dpi</td> - - <td>Monochrome</td> -</tr> -<tr> - <th align="left" colspan="3">NEC P2X</th> -</tr> -<tr> - - <td><code>necp2x.upp</code></td> - - <td>360×360dpi</td> - - <td>8-bit (Floyd-Steinberg)</td> -</tr> -<tr> - <th align="left" colspan="3">Any Epson Stylus Color</th> -</tr> -<tr> - - <td><code>stcany.upp</code></td> - - <td>360×360dpi</td> - - <td>4-bit, PostScript halftoning</td> -</tr> -<tr> - - <td><code>stcany_h.upp</code></td> - - <td>720×720dpi</td> - - <td>4-bit, PostScript halftoning</td> - </tr> -<tr> - <th align="left" colspan="3">Original Epson Stylus and Stylus Pro Color</th> - </tr> -<tr> - - <td><code>stc.upp</code></td> - - <td>360×360dpi</td> - - <td>32-bit CMYK, 15-pin</td> - </tr> -<tr> - - <td><code>stc_l.upp</code></td> - - <td>360×360dpi</td> - - <td>4-bit, PostScript halftoning, weaved noWeave</td> - </tr> -<tr> - - <td><code>stc_h.upp</code></td> - - <td>720×720dpi</td> - - <td>32-bit CMYK, 15-pin Weave</td> - </tr> -<tr> - <th align="left" colspan="3">Epson Stylus Color II</th> - </tr> -<tr> - - <td><code>stc2.upp</code></td> - - <td>360×360dpi</td> - - <td>32-bit CMYK, 20-pin, Epson Stylus Color II(s)</td> - </tr> -<tr> - - <td><code>stc2_h.upp</code></td> - - <td>720×720dpi</td> - - <td>32-bit CMYK, 20-pin, Epson Stylus Color II</td> - </tr> -<tr> - - <td><code>stc2s_h.upp</code></td> - - <td>720×720dpi</td> - - <td>32-bit CMYK, 20-pin, Epson Stylus Color IIs</td> - </tr> -<tr> - <th align="left" colspan="3">Epson Stylus Color 200</th> - </tr> -<tr> - - <td><code>stc200.upp</code></td> - - <td>360×720dpi</td> - - <td>Plain Paper</td> - </tr> -<tr> - <th align="left" colspan="3">Epson Stylus Color 300</th> - </tr> -<tr> - - <td><code>stc300.upp</code></td> - - <td>360×360dpi</td> - - <td>32-bit CMYK, plain paper</td> - </tr> -<tr> - - <td><code>stc300bl.upp</code></td> - - <td>180×180dpi</td> - - <td>black only, plain paper</td> - </tr> -<tr> - - <td><code>stc300bm.upp</code></td> - - <td>360×360dpi</td> - - <td>black only, plain paper</td> - </tr> -<tr> - <th align="left" colspan="3">Epson Stylus Color 500 (good transfer curves for plain paper)</th> - </tr> -<tr> - - <td><code>stc500p.upp</code></td> - - <td>360×360dpi</td> - - <td>32-bit CMYK, noWeave, plain paper</td> - </tr> -<tr> - - <td><code>stc500ph.upp</code></td> - - <td>720×720dpi</td> - - <td>32-bit CMYK, noWeave, plain paper</td> - </tr> -<tr> - <th align="left" colspan="3">Epson Stylus Color 600, 32/90-inch weaving</th> - </tr> -<tr> - - <td><code>stc600pl.upp</code></td> - - <td>360×360dpi</td> - - <td>32-bit CMYK, 32-pin, plain paper</td> - </tr> -<tr> - - <td><code>stc600p.upp</code></td> - - <td>720×720dpi</td> - - <td>32-bit CMYK, 32-pin, plain paper</td> - </tr> -<tr> - - <td><code>stc600ih.upp</code></td> - - <td>1440×720dpi</td> - - <td>32-bit CMYK, 30-pin, inkjet paper</td> - </tr> -<tr> - <th align="left" colspan="3">Epson Stylus Color 640</th> - </tr> -<tr> - - <td><code>stc640p.upp</code></td> - - <td>720×720dpi</td> - - <td>plain paper?</td> - </tr> -<tr> - - <td><code>st640p.upp</code></td> - - <td>720×720dpi</td> - - <td>CMYK, plain paper</td> - </tr> -<tr> - - <td><code>st640pg.upp</code></td> - - <td>720×720dpi</td> - - <td>grayscale, plain paper</td> - </tr> -<tr> - - <td><code>st640pl.upp</code></td> - - <td>360×360dpi</td> - - <td>CMYK, plain paper</td> - </tr> -<tr> - - <td><code>st640plg.upp</code></td> - - <td>360×360dpi</td> - - <td>grayscale, plain paper</td> - </tr> -<tr> - - <td><code>st640ih.upp</code></td> - - <td>1440×720dpi</td> - - <td>CMYK, inkjet paper</td> - </tr> -<tr> - - <td><code>st640ihg.upp</code></td> - - <td>1440×720dpi</td> - - <td>grayscale, inkjet paper</td> - </tr> -<tr> - <th align="left" colspan="3">Epson Stylus Color 800, 64/180-inch weaving</th> - </tr> -<tr> - - <td><code>stc800pl.upp</code></td> - - <td>360×360dpi</td> - - <td>32-bit CMYK, 64-pin, plain paper</td> - </tr> -<tr> - - <td><code>stc800p.upp</code></td> - - <td>720×720dpi</td> - - <td>32-bit CMYK, 64-pin, plain paper</td> - </tr> -<tr> - - <td><code>stc800ih.upp</code></td> - - <td>1440×720dpi</td> - - <td>32-bit CMYK, 62-pin, inkjet paper</td> - </tr> -<tr> - - <td><code>stc1520.upp</code></td> - - <td>1440×720dpi</td> - - <td>32-bit CMYK, 62-pin, inkjet paper</td> - </tr> -<tr> - <th align="left" colspan="3">Sun raster file</th> - </tr> -<tr> - - <td><code>ras1.upp</code></td> - - <td>1-bit</td> - - <td>monochrome (Ghostscript)</td> - </tr> -<tr> - - <td><code>ras3.upp</code></td> - - <td>3-bit</td> - - <td>RGB (Ghostscript)</td> - </tr> -<tr> - - <td><code>ras4.upp</code></td> - - <td>4-bit</td> - - <td>CMYK (Ghostscript)</td> - </tr> -<tr> - - <td><code>ras8m.upp</code></td> - - <td>8-bit</td> - - <td>grayscale (Floyd-Steinberg)</td> - </tr> -<tr> - - <td><code>ras24.upp</code></td> - - <td>24-bit</td> - - <td>RGB (Floyd-Steinberg)</td> - </tr> -<tr> - - <td><code>ras32.upp</code></td> - - <td>32-bit</td> - - <td>CMYK (CMYK-Floyd-Steinberg)</td> -</tr> -</table> -</blockquote> - -<p> -Thanks to Danilo Beuche, Guido Classen, Mark Goldberg and Hans-Heinrich -Viehmann for providing the files for the stc200, hp690, stc500 and the -stc640. Thanks to Michael Lossin <losse@germanymail.com> for the -newer st640 parameter sets.</p> - -<p> -Please note the following:</p> - -<blockquote><ul> -<li>Changing the resolution with Ghostscript's -<a href="Use.htm#Resolution_switch"><code>-r</code> switch</a> is -usually not possible.</li> -<li>For Epson Stylus Color models not listed above, the two -<code>stc500</code> variants are likely to work in addition to -<code>stcany</code>, but their gamma correction might be wrong.</li> -</ul></blockquote> - -<h3><a name="Uni_state"></a>The state of this driver</h3> - -<p> -The coding of <code>uniprint</code> was triggered by the requirements of -the various Stylus Color models and some personal needs for HP and NEC -drivers. Thus the Epson models are well represented among the distributed -parameter files. When this driver entered the beta test phase, three other -drivers appreared on the scene that could be at least partially integrated -into <code>uniprint</code>: <code>cdj850</code> by Uli Wortmann -(available at <a href="http://www.erdw.ethz.ch/~bonk/hp850/hp850.html">http://www.erdw.ethz.ch/~bonk/hp850/hp850.html</a>), -<code>hpdj</code> by Martin Lottermoser, and <code>bjc610</code> by -Helmut Riegler.</p> - -<p> -Uli addresses features of the more recent DeskJet models that will not be -available in <code>uniprint</code> soon. Martin taught me a lesson on -HP-PCL3 headers that will be available in <code>uniprint</code> -soon. Helmut in turn followed an almost similar idea, but targetted -primarily for printing on Canon printers from the pbmplus library. Starting -with version 1.68 of uniprint, BJC support is available. Work on the -<code>hpdj</code> integration will start after the update of my website.</p> - -<h3><a name="Uni_background"></a>Notes on <code>uniprint</code>'s background</h3> - -<p> -<code>uniprint</code> is actually an update of <code>stcolor</code>, -but much more versatile than its predecessor; <code>stcolor</code>, in -its turn, started as a clone of the color DeskJet family of drivers -(<code>cdj</code>*). Finally, <code>cdj</code>* can be considered an -addition of features to the simpler monochrome drivers of Ghostscript. This -addition of features is useful to get an idea of the functionality of -<code>uniprint</code>:</p> - -<blockquote> -<dl> -<dt>Monochrome to advanced color (<code>cdj</code>*): -<dd>This adds color mapping and rendering functions to the driver. -Error diffusion is especially important for the quality of printing. -</dl> - -<dl> -<dt>HP color to Epson Color (<code>stcolor</code>) -<dd>The Epson Stylus Color offered two features simultaneously: it could -produce 720×720dpi output and it could soak the paper. In other -words, it required more color management features inside the driver. This -is still the major conceptual difference in the data generation for HP and -Epson printers. -</dl> - -<dl> -<dt>Weaving techniques (<code>stcolor</code>) -<dd>Besides the internal color management, the Stylus Color did not provide -enough buffer space to operate the printer fast at 720×720dpi. The -use of weaving could yield triple the print speed. Weaving, also called -interleaving, is present in some monochrome drivers too. The new thing in -<code>stcolor</code> was the combination with error diffusion. -Unfortunately the weaving was somehow hard-coded, as the problems with the -newer members of the Stylus Color family of printers demonstrated. -</dl> - -<dl> -<dt>Generalized output format and weaving (<code>uniprint</code>) -<dd>The features mentioned above yield about 90% of -<code>stcolor</code>'s source code; only 10% is related to the -formatting of the output. The idea to make the output format switchable -came up soon after completing <code>stcolor</code>, but its final design -was triggered by the (personal) necessity to drive a NEC P2X and a -Designjet 750c. -</dl></blockquote> - -<p> -Thus <code>uniprint</code> accumulates almost any features that can be -found among the other printer drivers, which clearly has some disadvantage -in processing speed -- true in particular of version 1.75, since it was -targetted for functionality, and several speed-gaining features were -(knowingly) omitted.</p> - -<p> -To summarize and to introduce the terms used in the description of the -parameters, the features of <code>uniprint</code> that can be -parameterized are:</p> - -<blockquote><ul> -<li>color mapping,</li> -<li>color rendering (error diffusion or Floyd-Steinberg),</li> -<li>output format, including</li> -<li>weaving.</li> -</ul></blockquote> - -<h3><a name="Uni_make_pfile"></a>Godzilla's guide to the creation of Unified Printer Parameter (<code>.upp</code>) files</h3> - -<p> -Here is one of the distributed parameter files (<code>stc_l.upp</code>) -with some added comments. Also see the section that describes -<a href="#Uni_all_parameters">all <code>uniprint</code>'s parameters in -brief</a>.</p> - -<pre> --supModel="Epson Stylus Color I (and PRO Series), 360x360DpI, noWeave" --sDEVICE=uniprint -- Select the driver --dNOPAUSE -- Useful with printers --dSAFER -- Provides some security --dupColorModel=/DeviceCMYK -- Selects the color mapping --dupRendering=/ErrorDiffusion -- Selects the color rendering --dupOutputFormat=/EscP2 -- Selects the output format --r360x360 -- Adjusts the resolution --dupMargins="{ 9.0 39.96 9.0 9.0}" -- Establishes (L/B/R/T margins in points) --dupComponentBits="{1 1 1 1}" -- Map: bits per component (default: 8) --dupWeaveYPasses=4 -- Weave: Y-passes (default: 1) --dupOutputPins=15 -- Format/weave: scans per Command --dupBeginPageCommand="< -- Goes to the printer - 1b40 1b40 -- ESC '@' ESC '@' -> dual reset - 1b2847 0100 01 -- ESC '(' 'G' 1 0 1 -> graphics - 1b2869 0100 00 -- ESC '(' 'i' 1 0 1 -> no HW weave - 1b2855 0100 0A -- ESC '(' 'U' 1 0 10 -> 360dpi - 1b5500 -- ESC 'U' 0 -> bidir print - 1b2843 0200 0000 -- ESC '(' 'C' 2 0 xx -> page length - 1b2863 0400 0000 0000 -- ESC '(' 'c' 4 0 xxxx -> margins ->" -- as it is, unless: --dupAdjustPageLengthCommand -- Adjust page length in BOP requested --dupAdjustTopMarginCommand -- Adjust top margin in BOP --dupAdjustBottomMarginCommand -- Adjust bottom margin in BOP --dupEndPageCommand="(\033@\014)" -- Last (but one) data to the printer --dupAbortCommand="(\033@\15\12\12\12\12 Printout-Aborted\15\014)" -</pre> - -<p> -That's short, and if one removes <code>upWeaveYPasses</code> and -<code>upOutputPins</code> it becomes shorter, almost -<code>stcany.upp</code>. This miniature size is because I am most -familiar with ESC/P2, and was able to add defaults for the omitted -parameters. Now a few notes about the parameters used in this example:</p> - -<ul> -<li><code>upModel</code> is a string serving as a comment (and nothing else).</li> - -<li><a href="Use.htm#Output_device"><code>DEVICE</code></a>, -<a href="Use.htm#NoPause"><code>NOPAUSE</code></a>, <a -href="Use.htm#Safer"><code>SAFER</code></a> are well-known Ghostscript -parameters described in the <a href="Use.htm">usage documentation</a>.</li> - -<li><code>upColorModel</code> is one of major <code>uniprint</code> -parameters: it selects the color mapping and in turn the PostScript color -model. It supports the devices <code>/DeviceGray</code>, <code>/DeviceRGBW</code>, <code>/DeviceRGB</code>, <code>/DeviceCMYK</code>, and <code>/DeviceCMYKgenerate</code>.</li> - -<li><code>upRendering</code> selects the (color) rendering, supporting -the values <code>/ErrorDiffusion</code> and <code>/FSCMYK32</code>. -<code>/ErrorDiffusion</code> is similar to <code>fsmono</code>, -<code>fsrgb</code> and <code>fsx4</code> of <code>stcolor</code>, -while <code>/FSCMYK32</code> is (almost) identical to -<code>fscmyk</code> and <code>hscmyk</code>, but is restricted to -32-bit data and should be used in conjunction with -<code>/DeviceCMYKgenerate</code>.</li> - -<li><code>upOutputFormat</code> selects the output method, supporting the values -<code>/SunRaster</code>, <code>/Epson</code>, <code>/EscP2</code>, <code>/EscP2XY</code>, and<code>/Pcl</code>. - -<blockquote> -<table> -<tr> - <td><code>/SunRaster</code></td> - - <td>creates Sun raster files and requires no other parameters</td> - </tr> -<tr> - <td><code>/Epson</code></td> - - <td>is used for the elderly ESC/P format (used by many printers)</td> - </tr> -<tr> - <td><code>/EscP2</code></td> - - <td>is used by more recent Epson printers (no X weaving supported)</td> - </tr> -<tr> - <td><code>/EscP2XY</code></td> - - <td>supports X-Weaving, used with 1440dpi printers and in <code>stc2s_h</code></td> - </tr> -<tr> - <td><code>/Pcl</code></td> - - <td>HP PCL/RTL-style output formatter without weaving</td> - </tr> -</table> -</blockquote> -</li> -<li><code>-r360x360</code> is Ghostscript's standard -<a href="Use.htm#Resolution_switch">resolution switch</a>.</li> - -<li><code>upMargins="{ 9.0 39.96 9.0 9.0}"</code> -has function similar to the Ghostscript parameter -<code>.HWMargins</code>: it sets the left, bottom, right, and top -margins in points. <code>uniprint</code> provides this parameter to -enable automatic left-right exchange if <code>upYFlip</code> is active.</li> - -<li><code>upComponentBits</code> is an array of integers that selects -the bits stored in raster memory, by default 8 bits per component. In this -example, 1 bit is selected for each component, thus turning down the -Floyd-Steinberg algorithm (but still carrying out the time-consuming -computation). The related parameter "<code>upComponentShift</code>" -controls positioning the components within raster memory. Each of the -numbers given corresponds to a component which depends on the selected -"<code>upColorModel</code>": -<blockquote> -<table> -<tr> - <td align="center"> </td> - - <td align="center"><code>/DeviceGray</code></td> - - <td align="center"><code>/DeviceRGBW</code></td> - - <td align="center"><code>/DeviceRGB</code></td> - - <td align="center"><code>/DeviceCMYK</code></td> - - <td align="center"><code>/DeviceCMYKgenerate</code></td> - </tr> -<tr> - <td colspan="6"></td> - </tr> -<tr> - <td align="center">0</td> - - <td align="center">White</td> - - <td align="center">White</td> - - <td align="center">Red</td> - - <td align="center">Black</td> - - <td align="center">Black</td> - </tr> -<tr> - <td align="center">1</td> - - <td align="center">--</td> - - <td align="center">Red</td> - - <td align="center">Green</td> - - <td align="center">Cyan</td> - - <td align="center">Cyan</td> - </tr> -<tr> - <td align="center">2</td> - - <td align="center">--</td> - - <td align="center">Green</td> - - <td align="center">Blue</td> - - <td align="center">Magenta</td> - - <td align="center">Magenta</td> - </tr> -<tr> - <td align="center">3</td> - - <td align="center">--</td> - - <td align="center">Blue</td> - - <td align="center">--</td> - - <td align="center">Yellow</td> - - <td align="center">Yellow</td> - </tr> -</table> - -<p> -This order may not be suitable for some printers, so another parameter -"<code>upOutputComponentOrder</code>", also an array of integers, -selects the output order using the numbers on the left.</p> -</blockquote> - -<p> -One group of very important parameters not used in the example above -deserves to be mentioned here: the transfer arrays, named -"<code>up<em>{color}</em>Transfer</code>", where -<code><em>{color}</em></code> is one of the names in the table above. -These are -arrays of floats in the range 0.0 - 1.0 representing the color transfer -functions. They are used during mapping and rendering. In the simplest -case, these arrays ensure an equidistant distribution of the stored values -within the device space (which means a nonlinear mapping from Ghostscript's -point of view). If the given array does not cover the entire range from 0 -to 1, which applies for the Stylus Color family at high resolution for some -media, only the relevant part gets mapped to raster memory (meaning that -is's fully utilized) and the rendering takes care of the "overhang" (in -this case the post-diffusion of 1-bit components makes sense).</p> - -<p> -Finally an important note on the transfer arrays: for monochrome devices -the stored component is <code>White</code>, which is the way PostScript -defines these devices, but most printers require <code>Black</code>. -Thus one has to provide a falling "<code>upWhiteTransfer</code>" for -such printers.</p> -</li> - -<li><code>upWeaveYPasses</code> is an integer that gives the number of -print head passes required to achieve the requested Ydpi. This makes sense -only if</li> - -<li><code>upOutputPins</code> is set to something greater than 1. Thus -multiple pins or nozzles are transferred with a single command, and of -course such a command must be supported by the device.</li> - -</ul> - -<p> -If no other weave parameters are given, <code>uniprint</code> computes -several defaults which together do no weaving. The <code>/Epson</code> -and <code>/EscP2XY</code> formats take care of -"<code>upWeaveXPasses</code>" too.</p> - -<ul> - -<li><code>upBeginPageCommand</code> represents the data transferred to -the printer whenever a new page begins. Before that, -"<code>upBeginJobCommand</code>" is written to the device only once per -output file. (Intended for the HP PJL sequences).</li> - -<li><code>upAdjustBottomMarginCommand</code>, -<code>upAdjustMediaSize</code>, -<code>upAdjustPageLengthCommand</code>, -<code>upAdjustPageWidthCommand</code>, -<code>upAdjustResolutionCommand</code>, and -<code>upAdjustTopMarginCommand</code> - -<p> -Normally <code>uniprint</code> does not change the -"<code>upBeginPageCommand</code>", nor does it provide a default. -However, if the above boolean values are set, the corresponding values are -changed (provided that the code of the formatters supports this change and -the commands to be adjusted are included in the BOP string).</p> -</li> - -<li><code>upEndPageCommand</code> is the fixed termination sequence for -each page, and of course there is an "<code>upEndJobCommand</code>" too.</li> - -<li><code>upAbortCommand</code> is written if <code>uniprint</code>'s -interrupt detection is enabled and a signal is caught. It replaces -"<code>upEndPageCommand</code>" and "<code>upEndJobCommand</code>", -thus allowing the indication of an aborted job. (Ghostscript gets an error -return from <code>uniprint</code> in this case, and abandons further -processing.)</li> - -</ul> - -<p> -For the ESC/P(2) formats all commands represent binary data, while for -the PCL/RTL formatter some of them are formats for <code>fprintf</code>. These strings -<b><em>must</em></b> explicitly have a trailing "\0'.</p> - -<p> -I should write more, but the only recommendation is to -take a look at the various parameter files. Here are a few more hints.</p> - -<ul> -<li>If the Driver rejects a configuration, nothing happens until -<code>showpage</code>; then an error is raised and a message with -"CALL-REJECTED upd_print_page..." is printed on stderr.</li> - -<li><code>uniprint</code> has lots of messages that can be activated by -setting bits in the preprocessor macro <code>UPD_MESSAGES</code>. I -usually use the compile-time option <code>-DUPD_MESSAGES=0x17</code> for -configuration development. (For the semantics, check the -<code>UPD_M_</code> macros in the source.)</li> - -<li>A program "<code>uninfo.ps</code>" distributed with Ghostscript -displays interactively in alphabetical order the contents of the current -pagedevice dictionary. This includes any parameters generated or changed by -<code>uniprint</code>.</li> -</ul> - -<h3><a name="Uni_all_parameters"></a>All parameters in brief</h3> - -<p> -This table gives a brief explanation of every parameter known to -<code>uniprint</code>, listing them in alphabetical order. "[ ]" -denotes that a parameter is an array, and "(RO)" that it is read-only.</p> - -<blockquote> -<table> -<tr> - <th colspan="3">All uniprint parameters</th> - </tr> -<tr> - <th align="left">Parameter</th> - - <th align="left">Type</th> - - <th align="left">Use</th> - </tr> -<tr> - <td><code>upAbortCommand</code></td> - - <td>String</td> - - <td>End of page and file on interrupt</td> - </tr> -<tr> - <td><code>upAdjustBottomMarginCommand</code></td> - - <td>Bool</td> - - <td>Manipulate bottom margin in <code>upBeginPageCommand</code></td> - </tr> -<tr> - <td><code>upAdjustMediaSizeCommand</code></td> - - <td>Bool</td> - - <td>Manipulate <code>Mediasize</code> [intended]</td> - </tr> -<tr> - <td><code>upAdjustPageLengthCommand</code></td> - - <td>Bool</td> - - <td>Manipulate page length in <code>upBeginPageCommand</code></td> - </tr> -<tr> - <td><code>upAdjustPageWidthCommand</code></td> - - <td>Bool</td> - - <td>Manipulate page width in <code>upBeginPageCommand</code></td> - </tr> -<tr> - <td><code>upAdjustResolutionCommand</code></td> - - <td>Bool</td> - - <td>Manipulate resolution</td> - </tr> -<tr> - <td><code>upAdjustTopMarginCommand</code></td> - - <td>Bool</td> - - <td>Manipulate top margin in <code>upBeginPageCommand</code></td> - </tr> -<tr> - <td><code>upBeginJobCommand</code></td> - - <td>String</td> - - <td>Begin each output file</td> - </tr> -<tr> - <td><code>upBeginPageCommand</code></td> - - <td>String</td> - - <td>Begin each page</td> - </tr> -<tr> - <td><code>upBlackTransfer</code></td> - - <td>Float[ ]</td> - - <td>Black transfer (CMYK only!)</td> - </tr> -<tr> - <td><code>upBlueTransfer</code></td> - - <td>Float[ ]</td> - - <td>Blue transfer</td> - </tr> -<tr> - <td><code>upColorInfo</code></td> - - <td>Int[ ]</td> - - <td>struct <code>gx_device_color_info</code></td> - </tr> -<tr> - <td><code>upColorModel</code></td> - - <td>Name</td> - - <td>Select color mapping</td> - </tr> -<tr> - <td><code>upColorModelInitialized</code></td> - - <td>Bool (RO)</td> - - <td>Color mapping OK</td> - </tr> -<tr> - <td><code>upComponentBits</code></td> - - <td>Int[ ]</td> - - <td>Bits stored per component</td> - </tr> -<tr> - <td><code>upComponentShift</code></td> - - <td>Int[ ]</td> - - <td>Positioning within <code>gx_color_index</code></td> - </tr> -<tr> - <td><code>upCyanTransfer</code></td> - - <td>Float[ ]</td> - - <td>Cyan transfer</td> - </tr> -<tr> - <td><code>upEndJobCommand</code></td> - - <td>String</td> - - <td>End each file unless <code>upAbortCommand</code></td> - </tr> -<tr> - <td><code>upEndPageCommand</code></td> - - <td>String</td> - - <td>End each page unless <code>upAbortCommand</code></td> - </tr> -<tr> - <td><code>upErrorDetected</code></td> - - <td>Bool (RO)</td> - - <td>Severe (VM) error, not fully operational</td> - </tr> -<tr> - <td><code>upFSFixedDirection</code></td> - - <td>Bool</td> - - <td>Inhbits direction toggling in rendering</td> - </tr> -<tr> - <td><code>upFSProcessWhiteSpace</code></td> - - <td>Bool</td> - - <td>Causes white-space rendering</td> - </tr> -<tr> - <td><code>upFSReverseDirection</code></td> - - <td>Bool</td> - - <td>Run rendering in reverse (if fixed)</td> - </tr> -<tr> - <td><code>upFSZeroInit</code></td> - - <td>Bool</td> - - <td>Non-random rendering initialization</td> - </tr> -<tr> - <td><code>upFormatXabsolute</code></td> - - <td>Bool</td> - - <td>Write absolute X coordinates</td> - </tr> -<tr> - <td><code>upFormatYabsolute</code></td> - - <td>Bool</td> - - <td>Write absolute Y coordinates</td> - </tr> -<tr> - <td><code>upGreenTransfer</code></td> - - <td>Float[ ]</td> - - <td>Green transfer</td> - </tr> -<tr> - <td><code>upMagentaTransfer</code></td> - - <td>Float[ ]</td> - - <td>Magenta transfer</td> - </tr> -<tr> - <td><code>upMargins</code></td> - - <td>Float[ ]</td> - - <td>L/B/R/T margins in points</td> - </tr> -<tr> - <td><code>upModel</code></td> - - <td>String</td> - - <td>Comment string, holds some info</td> - </tr> -<tr> - <td><code>upOutputAborted</code></td> - - <td>Bool (RO)</td> - - <td>Caught an interrupt</td> - </tr> -<tr> - <td><code>upOutputBuffers</code></td> - - <td>Int</td> - - <td>Number of rendering buffers (2^<small><sup><b>N</b></sup></small>)</td> - </tr> -<tr> - <td><code>upOutputComponentOrder</code></td> - - <td>Int[ ]</td> - - <td>Order of components when printing</td> - </tr> -<tr> - <td><code>upOutputComponents</code></td> - - <td>Int</td> - - <td>Number of written components, not fully operational</td> -<tr> - <td><code>upOutputFormat</code></td> - - <td>Name</td> - - <td>Select output format</td> - </tr> -<tr> - <td><code>upOutputFormatInitialized</code></td> - - <td>Bool (RO)</td> - - <td>Format data OK</td> - </tr> -<tr> - <td><code>upOutputHeight</code></td> - - <td>Int</td> - - <td>Output height in pixels</td> - </tr> -<tr> - <td><code>upOutputPins</code></td> - - <td>Int</td> - - <td>Number of pins / nozzles per command</td> - </tr> -<tr> - <td><code>upOutputWidth</code></td> - - <td>Int</td> - - <td>Output width in pixels</td> - </tr> -<tr> - <td><code>upOutputXOffset</code></td> - - <td>Int</td> - - <td>Offset in pixels, if <code>upFormatXabsolute</code></td> -</tr> -<tr> - <td><code>upOutputXStep</code></td> - - <td>Int</td> - - <td>Divisor or multiplier for X coords</td> - </tr> -<tr> - <td><code>upOutputYOffset</code></td> - - <td>Int</td> - - <td>Offset in pixels, if <code>upFormatYabsolute</code></td> - </tr> -<tr> - <td><code>upOutputYStep</code></td> - - <td>Int</td> - - <td>Divisor or multiplier for Y coords</td> - </tr> -<tr> - <td><code>upRasterBufferInitialized</code></td> - - <td>Bool (RO)</td> - - <td>GS buffer OK</td> - </tr> -<tr> - <td><code>upRedTransfer</code></td> - - <td>Float[ ]</td> - - <td>Red transfer</td> -</tr> -<tr> - <td><code>upRendering</code></td> - - <td>Name</td> - - <td>Select rendering algorithm</td> - </tr> -<tr> - <td><code>upRenderingInitialized</code></td> - - <td>Bool (RO)</td> - - <td>Rendering parameters OK</td> - </tr> -<tr> - <td><code>upSelectComponentCommands</code></td> - - <td>String[ ]</td> - - <td>Establish color (output order!)</td> - </tr> -<tr> - <td><code>upSetLineFeedCommand</code></td> - - <td>String</td> - - <td>Adjust linefeed (Epson only)</td> - </tr> -<tr> - <td><code>upVersion</code></td> - - <td>String (RO)</td> - - <td>Source code version</td> - </tr> -<tr> - <td><code>upWeaveFinalPins</code></td> - - <td>Int[ ]</td> - - <td>Number of bottom pins on EOP passes</td> - </tr> -<tr> - <td><code>upWeaveFinalScan</code></td> - - <td>Int</td> - - <td>Begin EOP passes (Y-coord)</td> - </tr> -<tr> - <td><code>upWeaveFinalXStarts</code></td> - - <td>Int[ ]</td> - - <td>X-pass indices for EOP passes</td> - </tr> -<tr> - <td><code>upWeaveFinalYFeeds</code></td> - - <td>Int[ ]</td> - - <td>Y increments for EOP passes</td> - </tr> -<tr> - <td><code>upWeaveInitialPins</code></td> - - <td>Int[ ]</td> - - <td>Number of top pins on BOP passes</td> - </tr> -<tr> - <td><code>upWeaveInitialScan</code></td> - - <td>Int</td> - - <td>End BOP passes (Y coord)</td> - </tr> -<tr> - <td><code>upWeaveInitialXStarts</code></td> - - <td>Int[ ]</td> - - <td>X-pass indices for BOP passes</td> - </tr> -<tr> - <td><code>upWeaveInitialYFeeds</code></td> - - <td>int[ ]</td> - - <td>Y increments for BOP passes</td> - </tr> -<tr> - <td><code>upWeavePasses</code></td> - - <td>Int</td> - - <td>XPasses × YPasses</td> - </tr> -<tr> - <td><code>upWeaveXPasses</code></td> - - <td>Int</td> - - <td>Number of X passes</td> -</tr> -<tr> - <td><code>upWeaveXStarts</code></td> - - <td>Int[ ]</td> - - <td>X-pass indices for normal passes</td> - </tr> -<tr> - <td><code>upWeaveYFeeds</code></td> - - <td>Int[ ]</td> - - <td>Y increments for normal passes</td> - </tr> -<tr> - <td><code>upWeaveYOffset</code></td> - - <td>Int</td> - - <td>Number of blank or incomplete scans at BOP</td> - </tr> -<tr> - <td><code>upWeaveYPasses</code></td> - - <td>Int</td> - - <td>Number of X passes</td> - </tr> -<tr> - <td><code>upWhiteTransfer</code></td> - - <td>Float[ ]</td> - - <td>White transfer (monochrome devices!)</td> - </tr> -<tr> - <td><code>upWriteComponentCommands</code></td> - - <td>String[ ]</td> - - <td>Commands to write each component</td> - </tr> -<tr> - <td><code>upWroteData</code></td> - - <td>Bool (RO)</td> - - <td>Something (<code>BeginJob</code>) written to output</td> - </tr> -<tr> - <td><code>upXMoveCommand</code></td> - - <td>String</td> - - <td>X positioning command</td> - </tr> -<tr> - <td><code>upXStepCommand</code></td> - - <td>String</td> - - <td>Single step to the right</td> - </tr> -<tr> - <td><code>upYFlip</code></td> - - <td>Bool</td> - - <td>Flips output along the Y axis</td> - </tr> -<tr> - <td><code>upYMoveCommand</code></td> - - <td>String</td> - - <td>Y positioning command</td> - </tr> -<tr> - <td><code>upYStepCommand</code></td> - - <td>String</td> - - <td>Single step down</td> - </tr> -<tr> - <td><code>upYellowTransfer</code></td> - - <td>Float[ ]</td> - - <td>Yellow transfer</td> - </tr> -</table> -</blockquote> - -<h3><a name="Uni_honors"></a><code>uniprint</code>'s Roll of Honor</h3> - -<p> -I should mention all of the people who were involved in -<code>stcolor</code>'s evolution, but I've decided to start from scratch -here for <code>uniprint</code>:</p> - -<blockquote> -<dl> -<dt>John P. Beale -<dd>for testing the <code>stc600</code> modes -<dt>Bill Davidson -<dd>who triggered some weaving research and tested <code>stc2s_h</code> -<dt>L. Peter Deutsch -<dd>who triggered ease of configuration -<dt>Mark Goldberg -<dd>who prepared the <code>stc500</code> transfers -<dt>Scott F. Johnston and Scott J. Kramer -<dd>for testing the <code>stc800</code> modes -<dt>Martin Lottermoser -<dd>for his great commented H-P DeskJet driver -<dt>Helmut Riegler -<dd>for the BJC extension -<dt>Hans-Gerd Straeter -<dd>for some measured transfer curves and more -<dt>Uli Wortmann -<dd>for discussions and his <code>cdj850</code> driver -<dt>My family -<dd>for tolerating my printer-driver hacking -</dl> -</blockquote> - -<address> -Gunther Hess<br> -Duesseldorfer Landstr. 16b<br> -D-47249 Duisburg<br> -Germany<br> -+49 203 376273 telephone (MET evening hours)<br> -<<a href="mailto:ghess@elmos.de">ghess@elmos.de</a>> -</address> - -<h3><a name="Uni_weaving_howto"></a><tt>Uniprint</tt> weaving parameters howto</h3> -<p>This section was contributed by Glenn Ramsey.</p> -<p>I wrote this because the documentation was very brief and I really struggled -with it for a while, but it is very simple once you understand what is going -on.</p> -<p>This only describes how to work out the Y parameters, I haven't looked -at the X parameters yet.</p> -<ol> -<li> -<b>Determine the nozzle geometry (upOutputPins)</b> -<p> -You need to know how many nozzles the printer has and the spacing between -them. Usually you can find this out from the printer manual, or the printer -supplier, but you may have to dissect a couple of printer output files -produced with the driver supplied with the printer. There is a utility -called escp2ras<a href="#escp2ras"><sup>*</sup></a> that will help with that. -Sometimes the term pin is used instead of nozzle but they mean the same thing. </p> -<p>The number of nozzles will be the value assigned to the upOutputPins -parameter.</p> -<p>Actually you don't have to print with all the pins available but for -the purpose of demonstration I'll assume that we are using them all.</p> -<p> -<a name="escp2ras"></a>* escp2ras is available from Gunther Hess' page at <a href="http://www-md.e-technik.uni-rostock.de/ma/gunther/gs/index.html">http://www-md.e-technik.uni-rostock.de/ma/gunther/gs/index.html</a></p> -</li> -<li><b>Determine how many passes are required (upWeaveYPasses)</b></li> -<li>The number of passes required is going to depend on the required resolution -and the nozzle spacing. -<blockquote> -<tt>passes = resolution * nozzle spacing -</tt> -</blockquote> -This will be the value assigned to the upWeaveYPasses parameter. -<p>For example if the desired resolution is 360 dpi and the nozzles are -spaced at 1/90in then 360 * 1/90 = 4 passes are required. For 720 dpi 8 -passes would be required. The printer would, of course, have to be capable -of moving the paper in increments of either 360 or 720 dpi too.</p> - - </li> -<li> -<b>Determine the normal Y feed increment (upWeaveYFeeds)</b></p> -<p> -You need to work out how much to feed the paper so that when the paper -has moved by one head length in however many passes you have then each -row space on the paper has been passed over by at least one nozzle. There -will be one feed value for each pass and the feed values must comply with -the following rules:</p> -<blockquote> -<p><tt>sum of feeds = passes * nozzles -<br>feed%passes != 0 (feed is not exactly divisible by passes) -<br>sum of (nozzles - feed) = 0</tt></p> - -</blockquote> -<p>For example if passes=4 and nozzles=15, then sum of feeds=60. The feed -values could be 1,1,1,57 or 15,15,15,15 or 14,15,18,13.</p> -<p>These values will be assigned to the upWeaveYFeeds parameter.</p> -<p>You would need to experiment to see what combination looks best on the -printer.</p> -<p>I found it convenient to draw several lines of nozzles and then move -them around to see how the different combinations would fill the paper. -A computer drawing tool makes this easier than pencil and paper (I used -Dia, a GNOME app). The number of nozzles would probably be be a good place -to start.</p> -<p>Remember that if the number of passes is more than 1 then the feed increment -will be less than the nozzle spacing and <tt>passes × feed increment size</tt> -must equal the physical distance between each nozzle.</p> -<p> -</li> -<li> -<b>Determine the beginning of page pins (upWeaveInitialPins)</b></p> -<p> -These values will be assigned to the upWeaveInitialPins parameter and are -the numbers of nozzles to operate in each of the initial passes at the top -of a page. The nozzles that the values refer to are the topmost nozzles -on the head, nearest the top margin. If the image doesn't start at the -top margin then uniprint doesn't use these feeds.</p> -<p>I don't know a mathematical relation for this except that at least one -of the values must be the number of nozzles, but I'm sure that there must -be one. I used a graphical method, the description that follows refers -to the ascii diagram in below.</p> -<p>Draw a line of nozzles for each pass arranged as they would be using -the normal Y feed increment determined in step 3. In the diagram below -this would be passes 5-8.</p> -<p>Draw a line of nozzles that would print just before the first normal -pass. The feed increment for this pass will be close to and most likely -1 or 2 units less than the feed increment of the last normal pass. In the -example below this line is pass 4 and the feed increment is 13 whereas -the normal feed increment is 15.</p> -<p>Draw each pass before that with a small feed increment so that if all -of the nozzles appearing above the first nozzle of the first normal pass -operate then all of the spaces will be filled. This feed increment is usually -1 except in cases where some jiggery pokery is going on to make the printer -print at an apparent higher resolution than the nozzle diameter.</p> -<p>Now select the nozzles that will operate in each of theses initial passes -so that the paper is filled. In each pass the nozzles must be adjacent -to each other and at least one of the passes will have all the nozzles -operating. I suspect that for each combination of normal Y feed increments -there will only be one set of valid beginning of page increments.</p> -</li> -</ol> -<h4>Example: stc.upp from Aladdin Ghostscript 6.01</h4> -15 nozzles spaced at 1/90 in, 360 dpi requires 4 passes. -<blockquote><pre><tt> --dupWeaveYPasses=4 --dupOutputPins=15 --dupWeaveYFeeds="{15 15 15 15}" --dupWeaveInitialYFeeds="{1 1 1 13}" --dupWeaveInitialPins="{ 4 15 11 7}" -</tt></pre></blockquote> -The following diagram shows which nozzles operate during each pass. -<br>Passes 1-4 are beginning of page passes and passes 5-8 are normal passes. -<blockquote> -<p>x=nozzle operates, o=nozzle not used in this pass<tt></tt></p> -<p><tt> 1 2 3 4 5 6 7 8 - pass no</tt></p> -<br><tt>0 x</tt> -<br><tt>1 x</tt> -<br><tt>2 x</tt> -<br><tt>3 x</tt> -<br><tt>4 x</tt> -<br><tt>5 x</tt> -<br><tt>6 x</tt> -<br><tt>7 x</tt> -<br><tt>8 x</tt> -<br><tt>9 x</tt> -<br><tt>0 x</tt> -<br><tt>1 x</tt> -<br><tt>2 x</tt> -<br><tt>3 x</tt> -<br><tt>4 x</tt> -<br><tt>5 x</tt> -<br><tt>6 o x</tt> -<br><tt>7 x</tt> -<br><tt>8 x</tt> -<br><tt>9 x</tt> -<br><tt>0 o x</tt> -<br><tt>1 x</tt> -<br><tt>2 x</tt> -<br><tt>3 x</tt> -<br><tt>4 o x</tt> -<br><tt>5 x</tt> -<br><tt>6 x</tt> -<br><tt>7 x</tt> -<br><tt>8 o x</tt> -<br><tt>9 x</tt> -<br><tt>0 x</tt> -<br><tt>1 o x</tt> -<br><tt>2 o x</tt> -<br><tt>3 x</tt> -<br><tt>4 x</tt> -<br><tt>5 o x</tt> -<br><tt>6 o x</tt> -<br><tt>7 x</tt> -<br><tt>8 x</tt> -<br><tt>9 o x</tt> -<br><tt>0 o x</tt> -<br><tt>1 x</tt> -<br><tt>2 x</tt> -<br><tt>3 o x</tt> -<br><tt>4 o x</tt> -<br><tt>5 x</tt> -<br><tt>6 o -x</tt> -<br><tt>7 o x</tt> -<br><tt>8 o x</tt> -<br><tt>9 x</tt> -<br><tt>0 o -x</tt> -<br><tt>1 o x</tt> -<br><tt>2 o x</tt> -<br><tt>3 x</tt> -<br><tt>4 o -x</tt> -<br><tt>5 o x</tt> -<br><tt>6 o x</tt> -<br><tt>7 x</tt> -<br><tt>8 o -x</tt> -<br><tt>9 o x</tt> -<br><tt>0 x</tt> -<br><tt>1 -x</tt> -<br><tt>2 -x</tt> -<br><tt>3 x</tt> -<br><tt>4 x</tt> -<br><tt>5 -x</tt> -<br><tt>6 -x</tt> -<br><tt>7 x</tt> -<br><tt>8 x</tt> -<br><tt>9 -x</tt> -<br><tt>0 -x</tt> -<br><tt>1 x</tt> -<br><tt>2 x</tt> -<br><tt>3 -x</tt> -<br><tt>4 -x</tt> -<br><tt>5 x</tt> -<br><tt>6</tt> -<br><tt>7 -x</tt> -<br><tt>8 -x</tt> -<br><tt>9 x</tt> -<br><tt>0</tt> -<br><tt>1 -x</tt> -<br><tt>2 -x</tt> -<br><tt>3 x</tt> -<br><tt>4</tt> -<br><tt>5 -x</tt> -<br><tt>6 -x</tt> -<br><tt>7 x</tt> -<br><tt>8</tt> -<br><tt>9 -x</tt> -<br><tt>0 -x</tt> -<br><tt>1</tt> -<br><tt>2</tt> -<br><tt>3 -x</tt> -<br><tt>4 -x</tt> -<br><tt>5</tt> -<br><tt>6</tt> -<br><tt>7 -x</tt> -<br><tt>8 -x</tt> -<br><tt>9</tt> -<br><tt>0</tt> -<br><tt>1 -x</tt> -<br><tt>2 -x</tt> -<br><tt>3</tt> -<br><tt>4</tt> -<br><tt>5 -x</tt> -<br><tt>6</tt> -<br><tt>7</tt> -<br><tt>8</tt> -<br><tt>9 -x</tt> -<br><tt>0</tt> -<br><tt>1</tt> -<br><tt>2</tt> -<br><tt>3 -x</tt> -<br><tt>4</tt> -<br><tt>5</tt> -<br><tt>6</tt> -<br><tt>7 -x</tt> -</blockquote> -<p>These parameters would also work:</p> -<blockquote><pre><tt> --dupWeaveYPasses=4 --dupOutputPins=15 --dupWeaveYFeeds="{14 15 18 13}" --dupWeaveInitialYFeeds="{1 1 1 13}" --dupWeaveInitialPins="{ 4 11 7 15}" -</tt></pre></blockquote> - -<h3><a name="Uni_esc300"></a>Extension to <tt>uniprint</tt> for the Epson Stylus Color 300</h3> -<p>This section was contributed by Glenn Ramsey. -The Epson Stylus Color 300 uses a different command set to other Epson -Stylus Color printers that use the ESC/P2 language. As far as I can -tell its commands are a subset of ESC/P2. In ESC/P2 the colour to be -printed is selected by a 'set colour' command and then the data sent -is only printed in that colour until the colour is changed with another -'set colour' command. The Stylus Color 300 lacks this functionality. -The data sent to the printer maps directly to the ink nozzles and colour -of an output scan line in the printed output is determined by the position -of the scan line within the data. This means that the driver must know -how the nozzles are arranged and must format the output accordingly. -The extension adds a format that I have called EscNozzleMap and adds some - additional parameters to uniprint.</p><br> -<ul> - <li><code>upOutputFormat</code>selects the output method, and should be set to the value -<code>/EscNozzleMap</code> to select this format. - <blockquote> - <table cellpadding="0" cellspacing="0"> - <tbody> - <tr valign="Top"> - <td><code>/EscNozzleMap</code></td> - - <td>produces output for the Epson Stylus Color 300 - </td> - </tr> - </tbody> - </table> - </blockquote> - </li> -</ul> - -<blockquote> -<table> - <tr> - <th colspan="3">uniprint parameters for the EscNozzleMap format</th> - </tr> - <tr> - <th align="Left">Parameter</th> - - <th align="Left">Type</th> - - <th align="Left">Use</th> - </tr> - <tr> - <td colspan="3"></td> - </tr> - <tr> - <td><code>upNozzleMapRowsPerPass</code></td> - - <td>Int - </td> - - - <td>output rows to generate for each pass of the head - </td> - </tr> - <tr> - <td><code>upNozzleMapPatternRepeat</code></td> - - <td>Int - </td> - - <td>no. of rows that correspond to the repeat pattern of the - nozzles - </td> - </tr> - <tr> - <td><code>upNozzleMapRowMask</code></td> - <td>Int[] - </td> - <td>mask indicating the colour of the nozzles - </td> - </tr> - <tr> - <td><code>upNozzleMapMaskScanOffset</code></td> - - <td>Int[] - </td> - <td>mask indicating the physical position of the nozzles - </td> - </tr> - </table> -</blockquote> - -<h4>A more detailed description of the new parameters</h4> -<ul> - <li><code>upNozzleMapRowsPerPass</code><br> - The number of rows of data that are required to address all nozzles for a - single pass of the head. There will always be this number of rows of output - data generated. I'd expect it to be the same as the total number of nozzles but - it wouldn't break the formatter if it wasn't. So if you wanted to print with - only the 10th nozzle then row 10 would contain data corresponding to the bit - pattern and all of the others would be padded with zeros. - </li> - <li><code>upNozzleMapPatternRepeat</code><br> - The number of nozzles in each repeated group on the printing head. - This parameter must correspond with the length of the upNozzleMapRowMask array. - </li> - <li><code>upNozzleMapRowMask</code><br> - An array of integers that defines the colour of the nozzles on the - head and whether the nozzles will be used to print. The array index - defines the row index for the nozzle in the output data - and the value defines the colour of the nozzle. The mapping - of colours to values is defined in the table below. - <blockquote> - <table> - <tr> - <th align="center">colour - </th> - - <th align="center">mask value - </th> - </tr> - <tr valign="Top" align="center"> - <td><code>K</code></td> - - <td>1 - </td> - </tr> - <tr valign="Top" align="center"> - <td><code>C</code></td> - - <td>2 - </tr> - <tr valign="Top" align="center"> - <td><code>M</code></td> - - <td>3 - </td> - </tr> - <tr valign="Top" align="center"> - <td><code>Y</code></td> - - <td>4 - </td> - </tr> - <tr valign="Top" align="center"> - <td><code>no data</code></td> - - <td>0 - </td> - </tr> - </tbody> - </table> - </blockquote> - A value of 0 means that the nozzle is not used and the row in the output data will be - padded with zeros.<br> - </li> - - <li><code>upNozzleMapMaskScanOffset</code><br> - An array of integers that defines the physical position of the nozzles relative - to the first nozzle in the repeated group. The relative distance is measured in - printed line widths and will be different for different printing resolutions. - This parameter is used because the physical spacing of the nozzles may not - correspond to their mapping in the output data. For example the ESC300 has nozzles - physically arranged something like this: -<p></p> - <table> - <tr> - <td bgcolor="#00ffff"> - </td> - <td bgcolor="#ffff00"> - </td> - <td bgcolor="#000000"> - </td> - <td bgcolor="#ff00ff"> - </td> - <td bgcolor="#000000"> - </td> - <td> - </td> - <td bgcolor="#000000"> - </td> - <td> - </td> - <td> - </td> - <td> - </td> - <td> - </td> - <td> - </td> - <td bgcolor="#00ffff"> - </td> - <td bgcolor="#ffff00"> - </td> - <td bgcolor="#000000"> - </td> - <td bgcolor="#ff00ff"> - </td> - <td bgcolor="#000000"> - </td> - <td> - </td> - <td bgcolor="#000000"> - </td> - <td bgcolor="#ffffff"> - </td> - </tr> - <tr> - <td> - </td> - <td> - </td> - <td> - </td> - <td> - </td> - <td> - </td> - <td> - </td> - <td bgcolor="#00ffff"> - </td> - <td bgcolor="#ffff00"> - </td> - <td bgcolor="#000000"> - </td> - <td bgcolor="#ff00ff"> - </td> - <td bgcolor="#000000"> - </td> - <td> - </td> - <td bgcolor="#000000"> - </td> - <td> - </td> - <td> - </td> - <td> - </td> - <td> - </td> - <td> - </td> - <td bgcolor="#00ffff"> - </td> - <td bgcolor="#ffff00"> - </td> - <td>etc ... - </td> - </tr> - </table> - -<p>There is a one nozzle width space between the last two nozzles in each group. - In the output data the data for the last nozzle in the group would be in row 5 - (numbering starts at 0) but the nozzle is physically positioned at 6 spaces from - the first nozzle. </p> - - </li> -</ul> -<h4>Example 1 - Epson Stylus Color 300 - 360 dpi colour</h4> -<blockquote><pre> --dupWeaveYPasses=6 --dupOutputPins=11 --dupWeaveYFeeds="{ 11 11 11 11 11 11 }" --dupWeaveInitialYFeeds="{ 1 1 1 1 1 7 }" --dupWeaveInitialPins="{ 2 11 9 7 5 3 }" --dupNozzleMapRowsPerPass=64 --dupNozzleMapPatternRepeat=6 --dupNozzleMapRowMask="{ 2 4 1 3 0 0 }" --dupNozzleMapMaskScanOffset="{ 0 1 2 3 0 0 }" -</pre></blockquote> -The weaving parameters are the same as for any other uniprint driver -but they must be consistent with the nozzle map parameters. In this printer -the coloured nozzles are spaced at 1/60" so 6 passes are required for 360 -dpi resolution. -<p> -In the example there are 64 rows of data required for each head pass. Each -row must be completely filled with data for each pass so if certain nozzles -do not print in the pass then the rows for those nozzles will be padded -with zeroes.</p> -<P> -The row mask translates to "C Y K M 0 0" so in the output data rows 0,7,13,... -will contain data for cyan, rows 1,8,14,... will contain data for yellow, etc. Rows 4,10,16,... -and 5, 11,15,... will always be padded with zeroes. The <i>upNozzleMapPatternRepeat</i> -parameter defines the length of the mask.</p> -<p> -The row mask is repeated for each group of <i>upNozzleMapPatternRepeat</i> rows -in the output data. In this case there are 64 rows so there will be 10 groups -of "C Y K M 0 0" followed by "C Y K M" which is equivalent to 11 output -pins.</p> -<P> -The <i>upNozzleMaskScanOffset</i> array indicates how the data from the scan -buffer is mapped to the output data. The data is presented to the formatter -as a buffer of four colour scanlines. The index of the scanline being printed, -lets call it y, always corresponds, in this example, to the physical position of -the cyan nozzle but since the nozzles are not on the same horizontal -line then the other colours for the current pass must come from other -scanlines in the scan buffer. The example is { 0 1 2 3 0 0 }, this means that -when printing a 4 colour image the magenta data would come from scanline y+3, -the black from scanline y+2, etc. It would have been possible in this case -to use the array index instead of the <i>upNozzleMaskScanOffset</i> parameter -however the parameter is necessary to be able to use the full capability of the -printer in black only mode.</p> - -<h4>Example 2 - Epson Stylus Color 300 - 180 dpi black only</h4> -<blockquote> -<pre> --dupMargins="{ 9.0 39.96 9.0 9.0}" --dupWeaveYPasses=1 --dupOutputPins=31 --dupNozzleMapRowsPerPass=64 --dupNozzleMapPatternRepeat=6 --dupNozzleMapRowMask="{ 0 0 1 0 1 1}" --dupNozzleMapMaskScanOffset="{ 0 0 0 0 1 2 }" -</pre> -</blockquote> -In this example there is no weaving. -<p> -The ESC300 has black nozzles evenly physically arranged as K K K but the data must -be sent to the printer as 00K0KK. This is handled by the <i>upNozzleMapRowMask</i> -and <i>upNozzleMaskScanOffset</i> arrays. The <i>upNozzleMapRowMask</i> array is -{ 0 0 1 0 1 1} which translates to { 0 0 K 0 K K } so rows 0, 1 and 3 will always -contain zeros and the other rows will contain data.</p> -<p> -The <i>upNozzleMaskScanOffset</i> array -in this case is { 0 0 0 0 1 2 } so if the data for the 1st nozzle comes from row -y in the scan buffer then the data for the 2nd and 3rd nozzles will come from rows -y+1 and y+2.</p> - -<h4>Example 3 - Epson Stylus Color 300 - 360 dpi black only</h4> -<blockquote> -<pre> --dupWeaveYPasses=2 --dupOutputPins=31 --dupWeaveYFeeds="{31 31}" --dupWeaveInitialYFeeds="{1 31}" --dupWeaveInitialPins="{16 31}" --dupNozzleMapRowsPerPass=64 --dupNozzleMapPatternRepeat=6 --dupNozzleMapRowMask="{ 0 0 1 0 1 1}" --dupNozzleMapMaskScanOffset="{ 0 0 0 0 2 4 }" -</pre> -</blockquote> -In this example 2 weave passes are required to achieve the desired resolution. -<p> -The <i>upNozzleMaskScanOffset</i> array in this case is { 0 0 0 0 2 4 } because -there are two weave passes so if the data for the first nozzle comes from row y -in the scan buffer then the data for the 2nd and 3rd nozzles must come from rows -y+(1*2) and y+(2*2).</p> -<p> -<address> -Glenn Ramsey<br> -glennr at users.sourceforge.net<br> -February 2001 -</address></p> -<br> - -<!-- [3.0 begin visible trailer] =========================================== --> -<hr> - -<p> -<small>Copyright © 2000-2022 Artifex Software, Inc. All rights reserved.</small> - -<p> -This software is provided AS-IS with no warranty, either express or -implied. - -This software is distributed under license and may not be copied, modified -or distributed except as expressly authorized under the terms of that -license. Refer to licensing information at <a href="https://www.artifex.com">https://www.artifex.com</a> -or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200, -Novato, CA 94945, U.S.A., +1(415)492-9861, for further information. - -<p> -<small>Ghostscript version 9.56.1, 4 April 2022 - -<!-- [3.0 end visible trailer] ============================================= --> - -<!--FINISH EDITING HERE--> - </div><!-- close inner --> - </div><!-- close outer --> - </article> - </main> - <script src="site.js"></script> -</body> -</html> |