# Printing in Wine

How to print documents in Wine...

## Printing

Printing in Wine can be done using the built-in Wine PostScript driver (+ ghostscript to produce output for non-PostScript printers).

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.

### Built-in 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.

### Spooling

Spooling is rather primitive. The [spooler] section of the wine config file 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`.

## The Wine PostScript Driver

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.

### Installation

#### Installation of CUPS printers

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

#### 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`.

#### 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 customize the PostScript driver contents of `winedefault.reg` (see below) and use the Winelib program `programs/regedit/regedit`. 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/winedefault.reg ~`

- `vi ~/winedefault.reg`

- Edit the copy of `winedefault.reg` to suit your PostScript printing requirements. At a minimum, you must specify a PPD file for each printer.

- `regedit ~/winedefault.reg`

#### 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 built-in.

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 the wine config file, this enables printing via external printer drivers and does not affect the built-in 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.