                              Wine Documentation                               
Prev                      Chapter 4. Configuring Wine                      Next
-------------------------------------------------------------------------------

4.9. Printing in Wine

How to print documents in Wine...

4.9.1. Printing

Written by Huw D M Davies <h.davies1@physics.ox.ac.uk>

(Extracted from wine/documentation/printing)

Printing in Wine can be done in one of two ways:

 1. Use the builtin Wine PostScript driver (+ ghostscript to produce output for
    non-PostScript printers).
   
 2. Use an external windows 3.1 printer driver (outdated, probably won't get
    supported any more).
   
Note that at the moment WinPrinters (cheap, dumb printers that require the host
computer to explicitly control the head) will not work with their Windows
printer drivers. It is unclear whether they ever will.

4.9.1.1. Builtin Wine PostScript driver

Enables printing of PostScript files via a driver built into Wine. See below
for installation instructions. The code for the PostScript driver is in dlls/
wineps/.

The driver behaves as if it were a DRV file called wineps.drv which at the
moment is built into Wine. Although it mimics a 16 bit driver, it will work
with both 16 and 32 bit apps, just as win9x drivers do.

4.9.1.2. External printer drivers (non-working as of Jul 8, 01)

At present only 16 bit drivers will work (note that these include win9x
drivers). To use them, add

printer=on
        

to the [wine] section of wine.conf (or ~/.wine/config). This lets CreateDC
proceed if its driver argument is a 16 bit driver. You will probably also need
to add

"TTEnable" = "0" "TTOnly" = "0"
        

to the [TrueType] section of ~/.wine/config. The code for the driver interface
is in graphics/win16drv.

4.9.1.3. Spooling

Spooling is rather primitive. The [spooler] section of wine.conf maps a port
(e.g. LPT1:) to a file or a command via a pipe. For example the following lines

"LPT1:" = "foo.ps"
"LPT2:" = "|lpr"
        

map LPT1: to file foo.ps and LPT2: to the lpr command. If a job is sent to an
unlisted port, then a file is created with that port's name; e.g. for LPT3: a
file called LPT3: would be created.

There are now also virtual spool queues called LPR:printername, which send the
data to lpr -Pprintername. You do not need to specify those in the config file,
they are handled automatically by dlls/gdi/printdrv.c.

4.9.2. The Wine PostScript Driver

Written by Huw D M Davies <h.davies1@physics.ox.ac.uk>

(Extracted from wine/documentation/psdriver)

This allows Wine to generate PostScript files without needing an external
printer driver. Wine in this case uses the system provided PostScript printer
filters, which almost all use ghostscript if necessary. Those should be
configured during the original system installation or by your system
administrator.

4.9.2.1. Installation

4.9.2.1.1. Installation of CUPS printers

If you are using CUPS, you do not need to configure .ini or registry entries,
everything is autodetected.

4.9.2.1.2. Installation of LPR /etc/printcap based printers

If your system is not yet using CUPS, it probably uses LPRng or a LPR based
system with configuration based on /etc/printcap.

If it does, your printers in /etc/printcap are scanned with a heuristic whether
they are PostScript capable printers and also configured mostly automatic.

Since WINE cannot find out what type of printer this is, you need to specify a
PPD file in the [ppd] section of ~/.wine/config. Either use the shortcut name
and make the entry look like:

            [ppd]
            "ps1" = "/usr/lib/wine/ps1.ppd"
          

Or you can specify a generic PPD file that is to match for all of the remaining
printers. A generic PPD file can be found in documentation/samples/generic.ppd.

4.9.2.1.3. Installation of other printers

You do not need to do this if the above 2 sections apply, only if you have a
special printer.

  Wine PostScript Driver=WINEPS,LPT1:
          

to the [devices] section and

  Wine PostScript Driver=WINEPS,LPT1:,15,45
          

to the [PrinterPorts] section of win.ini, and to set it as the default printer
also add

  device = Wine PostScript Driver,WINEPS,LPT1:
          

to the [windows] section of win.ini.

You also need to add certain entries to the registry. The easiest way to do
this is to customise the contents of documentation/psdrv.reg (see below) and
use the Winelib program programs/regapi/regapi. For example, if you have
installed the Wine source tree in /usr/src/wine, you could use the following
series of commands:

  * cp /usr/src/wine/documentation/psdrv.reg ~
   
  * vi ~/psdrv.reg
   
  * Edit the copy of psdrv.reg to suit your requirements. At a minimum, you
    must specify a PPD file for each printer.
   
  * regapi setValue < ~/psdrv.reg
   
4.9.2.1.4. Required configuration for all printer types

You won't need Adobe Font Metric (AFM) files for the (type 1 PostScript) fonts
that you wish to use any more. Wine now has this information builtin.

You'll need a PPD file for your printer. This describes certain characteristics
of the printer such as which fonts are installed, how to select manual feed
etc. Adobe has many of these on its website, have a look in ftp://ftp.adobe.com
/pub/adobe/printerdrivers/win/all/. See above for information on configuring
the driver to use this file.

To enable colour printing you need to have the *ColorDevice entry in the PPD
set to true, otherwise the driver will generate greyscale.

Note that you need not set printer=on in the [wine] section of wine.conf, this
enables printing via external printer drivers and does not affect the builtin
PostScript driver.

If you're lucky you should now be able to produce PS files from Wine!

I've tested it with win3.1 notepad/write, Winword6 and Origin4.0 and 32 bit
apps such as win98 wordpad, Winword97, Powerpoint2000 with some degree of
success - you should be able to get something out, it may not be in the right
place.

4.9.2.2. TODO / Bugs

  * Driver does read PPD files, but ignores all constraints and doesn't let you
    specify whether you have optional extras such as envelope feeders. You will
    therefore find a larger than normal selection of input bins in the print
    setup dialog box. I've only really tested ppd parsing on the hp4m6_v1.ppd
    file.
   
  * No TrueType download.
   
  * StretchDIBits uses level 2 PostScript.
   
  * AdvancedSetup dialog box.
   
  * Many partially implemented functions.
   
  * ps.c is becoming messy.
   
  * Notepad often starts text too far to the left depending on the margin
    settings. However the win3.1 pscript.drv (under wine) also does this.
   
  * Probably many more...
   
Please contact me if you want to help so that we can avoid duplication.

Huw D M Davies <h.davies1@physics.ox.ac.uk>

-------------------------------------------------------------------------------
Prev                                  Home                                 Next
Dealing with Fonts                     Up                          Running Wine
