| <chapter id="printing"> | |
| <title>Printing in Wine</title> | |
| <para>How to print documents in Wine...</para> | |
| <sect1 id="wine-printing"> | |
| <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. Both of which are pretty alpha. | |
| </para> | |
| <orderedlist> | |
| <listitem> | |
| <para>Use an external windows 3.1 printer driver.</para> | |
| </listitem> | |
| <listitem> | |
| <para> | |
| Use the builtin Wine Postscript driver (+ ghostscript to produce | |
| output for non-postscript printers). | |
| </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> | |
| <sect2> | |
| <title>External printer drivers</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 <filename>wine.conf</filename> (or | |
| <filename>~/.wine/config</filename>). 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> | |
| </sect2> | |
| <sect2> | |
| <title>Builtin Wine PostScript driver</title> | |
| <para> | |
| Enables printing of PostScript files via a driver built into Wine. See | |
| <filename>documentation/psdriver</filename> for installation | |
| instructions. The code for the PostScript driver is in | |
| <filename>graphics/psdrv</filename>. | |
| </para> | |
| </sect2> | |
| <sect2> | |
| <title>Spooling</title> | |
| <para> | |
| Spooling is rather primitive. The [spooler] section of | |
| <filename>wine.conf</filename> 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> | |
| </sect2> | |
| </sect1> | |
| <sect1 id="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> | |
| When complete this will allow Wine to generate PostScript files without | |
| needing an external printer driver. It should be possible to print to a | |
| non PostScript printer by filtering the output through ghostscript. | |
| </para> | |
| <sect2> | |
| <title>Installation</title> | |
| <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> | |
| <para> | |
| To install it add | |
| </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>~/.wine/config</filename> and ??? | |
| <emphasis>[sic]</emphasis> | |
| </para> | |
| <para> | |
| To run 32 bit apps (and 16 bit apps using the | |
| <literal>builtin</literal> commdlg) you also need to add certain | |
| entries to the registry. The easiest way to do that at the moment is | |
| to use the winelib program <command>programs/regapi/regapi</command> | |
| with the file <filename>documentation/psdrv.reg</filename>. To do this | |
| <command>cd</command> to <filename>programs/regapi/regapi</filename> | |
| and type <userinput>make</userinput> to actually make the program, then | |
| type <userinput>./regapi setValue | |
| <../../documentation/psdrv.reg</userinput>. You can obviously | |
| edit <filename>psdrv.reg</filename> to suit your requirements. | |
| </para> | |
| <para> | |
| You will need Adobe Font Metric (AFM) files for the (type 1 PostScript) | |
| fonts that you wish to use. You can get these from | |
| <ulink url="ftp://ftp.adobe.com/pub/adobe/type/win/all/afmfiles"> | |
| ftp://ftp.adobe.com/pub/adobe/type/win/all/afmfiles </ulink>. The | |
| directories <filename>base17</filename> or <filename>base35</filename> | |
| are good places to start. Note that these are only the font metrics and | |
| not the fonts themselves. At the moment the driver does not download | |
| additional fonts, so you can only use fonts that are already present on | |
| the printer. | |
| </para> | |
| <para> | |
| Then create a [afmfiles] section in your | |
| <filename>wine.conf</filename> (or | |
| <filename>~/.wine/config</filename>) and add a line of the form | |
| </para> | |
| <screen> | |
| "file<n>" = "/unix/path/name/filename.afm" | |
| </screen> | |
| <para> | |
| for each AFM file that you wish to use. [This might change in the future] | |
| </para> | |
| <para> | |
| You also require 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 also 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>. Create | |
| a [psdrv] section in your <filename>wine.conf</filename> (or | |
| <filename>~/.wine/config</filename>) and add the following entry: | |
| </para> | |
| <screen> | |
| "ppdfile" = "/somewhere/file.ppd" | |
| </screen> | |
| <para> | |
| By default, the driver will look for a file named | |
| <filename>default.ppd</filename> in the directory from which | |
| you started wine. | |
| </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 <filename>wine.conf</filename>, this | |
| enables printing via external printer drivers and does not | |
| affect wineps. | |
| </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> | |
| </sect2> | |
| <sect2> | |
| <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> | |
| </sect2> | |
| </sect1> | |
| </chapter> | |
| <!-- Keep this comment at the end of the file | |
| Local variables: | |
| mode: sgml | |
| sgml-parent-document:("wine-doc.sgml" "set" "book" "chapter" "") | |
| End: | |
| --> |