|  | <sect1 id="config-printing"> | 
|  | <title>Printing in Wine</title> | 
|  | <para>How to print documents in Wine...</para> | 
|  |  | 
|  | <sect2 id="config-printing-intro"> | 
|  | <title>Printing</title> | 
|  |  | 
|  | <para> | 
|  | Written by &name-huw-davies; <email>&email-huw-davies;</email> | 
|  | </para> | 
|  | <para> | 
|  | (Extracted from <filename>wine/documentation/printing</filename>) | 
|  | </para> | 
|  |  | 
|  | <para> | 
|  | Printing in Wine can be done in one of two ways: | 
|  | </para> | 
|  | <orderedlist> | 
|  | <listitem> | 
|  | <para> | 
|  | Use the built-in Wine PostScript driver (+ ghostscript to produce | 
|  | output for non-PostScript printers). | 
|  | </para> | 
|  | </listitem> | 
|  | <listitem> | 
|  | <para> | 
|  | Use an external windows 3.1 printer driver (outdated, probably won't get supported any more). | 
|  | </para> | 
|  | </listitem> | 
|  | </orderedlist> | 
|  |  | 
|  | <para> | 
|  | 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. | 
|  | </para> | 
|  |  | 
|  | <sect3> | 
|  | <title>Built-in Wine PostScript driver</title> | 
|  | <para> | 
|  | Enables printing of PostScript files via a driver built into Wine. See | 
|  | below for installation instructions. The code for the PostScript | 
|  | driver is in <filename>dlls/wineps/</filename>. | 
|  | </para> | 
|  | <para> | 
|  | The driver behaves as if it were a DRV file called | 
|  | <filename>wineps.drv</filename> 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. | 
|  | </para> | 
|  | </sect3> | 
|  |  | 
|  | <!-- | 
|  | <sect3> | 
|  | <title>External printer drivers (non-working as of Jul 8, 01)</title> | 
|  | <para> | 
|  | At present only 16 bit drivers will work (note that these include | 
|  | win9x drivers).  To use them, add | 
|  | </para> | 
|  | <screen> | 
|  | printer=on | 
|  | </screen> | 
|  | <para> | 
|  | to the [wine] section of the wine config file. This lets | 
|  | <function>CreateDC</function> proceed if its driver argument is a 16 | 
|  | bit driver. You will probably also need to add | 
|  | </para> | 
|  | <screen> | 
|  | "TTEnable" = "0" "TTOnly" = "0" | 
|  | </screen> | 
|  | <para> | 
|  | to the [TrueType] section of <filename>~/.wine/config</filename>. The code for | 
|  | the driver interface is in <filename>graphics/win16drv</filename>. | 
|  | </para> | 
|  | </sect3> | 
|  | --> | 
|  |  | 
|  | <sect3> | 
|  | <title>Spooling</title> | 
|  | <para> | 
|  | Spooling is rather primitive. The [spooler] section of | 
|  | the wine config file maps a port (e.g. | 
|  | <systemitem>LPT1:</systemitem>) to a file or a command via a pipe. For | 
|  | example the following lines | 
|  | </para> | 
|  | <screen> | 
|  | "LPT1:" = "foo.ps" | 
|  | "LPT2:" = "|lpr" | 
|  | </screen> | 
|  | <para> | 
|  | map <systemitem>LPT1:</systemitem> to file <filename>foo.ps</filename> | 
|  | and <systemitem>LPT2:</systemitem> to the <command>lpr</command> | 
|  | command. If a job is sent to an unlisted port, then a file is created | 
|  | with that port's name; e.g. for <systemitem>LPT3:</systemitem> a file | 
|  | called <systemitem>LPT3:</systemitem> would be created. | 
|  | </para> | 
|  | <para> | 
|  | There are now also virtual spool queues called | 
|  | <systemitem>LPR:printername</systemitem>, which send the data | 
|  | to <command>lpr -Pprintername</command>. You do not need to | 
|  | specify those in the config file, they are handled automatically by | 
|  | <filename>dlls/gdi/printdrv.c</filename>. | 
|  | </para> | 
|  | </sect3> | 
|  | </sect2> | 
|  |  | 
|  | <sect2 id="config-printing-psdriver"> | 
|  | <title>The Wine PostScript Driver</title> | 
|  |  | 
|  | <para> | 
|  | Written by &name-huw-davies; <email>&email-huw-davies;</email> | 
|  | </para> | 
|  | <para> | 
|  | (Extracted from <filename>wine/documentation/psdriver</filename>) | 
|  | </para> | 
|  |  | 
|  | <para> | 
|  | 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. | 
|  | </para> | 
|  |  | 
|  | <sect3> | 
|  | <title>Installation</title> | 
|  | <sect4> | 
|  | <title>Installation of CUPS printers</title> | 
|  | <para> | 
|  | If you are using CUPS, you do not need to configure .ini or | 
|  | registry entries, everything is autodetected. | 
|  | </para> | 
|  | </sect4> | 
|  | <sect4> | 
|  | <title>Installation of LPR /etc/printcap based printers</title> | 
|  | <para> | 
|  | If your system is not yet using CUPS, it probably uses LPRng | 
|  | or a LPR based system with configuration based on <filename>/etc/printcap</filename>. | 
|  | </para> | 
|  | <para> | 
|  | If it does, your printers in <filename>/etc/printcap</filename> | 
|  | are scanned with a heuristic whether they are PostScript capable | 
|  | printers and also configured mostly automatic. | 
|  | </para> | 
|  | <para> | 
|  | Since Wine cannot find out what type of printer this is, you | 
|  | need to specify a PPD file in the [ppd] section of | 
|  | <filename>~/.wine/config</filename>. Either use the shortcut | 
|  | name and make the entry look like: | 
|  | </para> | 
|  | <screen> | 
|  | [ppd] | 
|  | "ps1" = "/usr/lib/wine/ps1.ppd" | 
|  | </screen> | 
|  | <para> | 
|  | 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 | 
|  | <filename>documentation/samples/generic.ppd</filename>. | 
|  | </para> | 
|  | </sect4> | 
|  | <sect4> | 
|  | <title>Installation of other printers</title> | 
|  | <para> | 
|  | You do not need to do this if the above 2 sections apply, only if | 
|  | you have a special printer. | 
|  | </para> | 
|  | <screen> | 
|  | Wine PostScript Driver=WINEPS,LPT1: | 
|  | </screen> | 
|  | <para> | 
|  | to the [devices] section and | 
|  | </para> | 
|  | <screen> | 
|  | Wine PostScript Driver=WINEPS,LPT1:,15,45 | 
|  | </screen> | 
|  | <para> | 
|  | to the [PrinterPorts] section of <filename>win.ini</filename>, | 
|  | and to set it as the default printer also add | 
|  | </para> | 
|  | <screen> | 
|  | device = Wine PostScript Driver,WINEPS,LPT1: | 
|  | </screen> | 
|  | <para> | 
|  | to the [windows] section of <filename>win.ini</filename>. | 
|  | </para> | 
|  | <para> | 
|  | You also need to add certain entries to the registry. | 
|  | The easiest way to do this is to customize the PostScript | 
|  | driver contents of <filename>winedefault.reg</filename> (see below) and use the | 
|  | Winelib program <command>programs/regedit/regedit</command>.  For | 
|  | example, if you have installed the Wine source tree in | 
|  | <filename>/usr/src/wine</filename>, you could use the following | 
|  | series of commands: | 
|  | <itemizedlist> | 
|  | <listitem> | 
|  | <para> | 
|  | <userinput>cp /usr/src/wine/winedefault.reg ~</userinput> | 
|  | </para> | 
|  | </listitem> | 
|  | <listitem> | 
|  | <para> | 
|  | <userinput>vi ~/winedefault.reg</userinput> | 
|  | </para> | 
|  | </listitem> | 
|  | <listitem> | 
|  | <para> | 
|  | Edit the copy of <filename>winedefault.reg</filename> to suit your | 
|  | PostScript printing requirements. | 
|  | At a minimum, you must specify a PPD file for each printer. | 
|  | </para> | 
|  | </listitem> | 
|  | <listitem> | 
|  | <para> | 
|  | <userinput>regedit ~/winedefault.reg</userinput> | 
|  | </para> | 
|  | </listitem> | 
|  | </itemizedlist> | 
|  | </para> | 
|  | </sect4> | 
|  | <sect4> | 
|  | <title>Required configuration for all printer types</title> | 
|  | <para> | 
|  | 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. | 
|  | </para> | 
|  | <para> | 
|  | 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 | 
|  | <ulink url="ftp://ftp.adobe.com/pub/adobe/printerdrivers/win/all/"> | 
|  | ftp://ftp.adobe.com/pub/adobe/printerdrivers/win/all/</ulink>. | 
|  | See above for information on configuring the driver to use this | 
|  | file. | 
|  | </para> | 
|  | <para> | 
|  | To enable colour printing you need to have the | 
|  | <literal>*ColorDevice</literal> entry in the PPD set to | 
|  | <literal>true</literal>, otherwise the driver will generate | 
|  | greyscale. | 
|  | </para> | 
|  | <para> | 
|  | Note that you need not set <literal>printer=on</literal> 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. | 
|  | </para> | 
|  | <para> | 
|  | If you're lucky you should now be able to produce PS files | 
|  | from Wine! | 
|  | </para> | 
|  | <para> | 
|  | 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. | 
|  | </para> | 
|  | </sect4> | 
|  | </sect3> | 
|  |  | 
|  | <sect3> | 
|  | <title>TODO / Bugs</title> | 
|  |  | 
|  | <itemizedlist> | 
|  | <listitem> | 
|  | <para> | 
|  | 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 <filename>hp4m6_v1.ppd</filename> file. | 
|  | </para> | 
|  | </listitem> | 
|  | <listitem> | 
|  | <para> | 
|  | No TrueType download. | 
|  | </para> | 
|  | </listitem> | 
|  | <listitem> | 
|  | <para> | 
|  | StretchDIBits uses level 2 PostScript. | 
|  | </para> | 
|  | </listitem> | 
|  | <listitem> | 
|  | <para> | 
|  | AdvancedSetup dialog box. | 
|  | </para> | 
|  | </listitem> | 
|  | <listitem> | 
|  | <para> | 
|  | Many partially implemented functions. | 
|  | </para> | 
|  | </listitem> | 
|  | <listitem> | 
|  | <para> | 
|  | ps.c is becoming messy. | 
|  | </para> | 
|  | </listitem> | 
|  | <listitem> | 
|  | <para> | 
|  | Notepad often starts text too far to the left depending | 
|  | on the margin settings. However the win3.1 | 
|  | <filename>pscript.drv</filename> (under wine) also does | 
|  | this. | 
|  | </para> | 
|  | </listitem> | 
|  | <listitem> | 
|  | <para> | 
|  | Probably many more... | 
|  | </para> | 
|  | </listitem> | 
|  | </itemizedlist> | 
|  |  | 
|  | <para> | 
|  | Please contact me if you want to help so that we can avoid duplication. | 
|  | </para> | 
|  | <para> | 
|  | &name-huw-davies; <email>&email-huw-davies;</email> | 
|  | </para> | 
|  | </sect3> | 
|  | </sect2> | 
|  | </sect1> | 
|  |  | 
|  | <!-- Keep this comment at the end of the file | 
|  | Local variables: | 
|  | mode: sgml | 
|  | sgml-parent-document:("wine-user.sgml" "set" "book" "chapter" "") | 
|  | End: | 
|  | --> |