  <sect1 id="printing">
    <title>Printing in Wine</title>
    <para>How to print documents in Wine...</para>

    <sect2 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:
      </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>

      <sect3>
        <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>
      </sect3>

      <sect3>
        <title>Builtin 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>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>
	<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="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 /etc/printcap.
	  </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:
	  </para>
	  <screen>
	    [ppd]
	    "ps1" = "/usr/lib/wine/ps1.ppd"
	  </screen>
	  <para>
	    Or you can specify a generic PPD file matching for all of the rest
	    printers. A generic PPD file can be found in
	    <filename>documenation/samples/generic.ppd</filename>.
	  </para>
	</sect4>
	<sect4>
	  <title>Installation of other printers</title>
	  <para>
	    You do not need to 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>~/.wine/config</filename> and ???
	    <emphasis>[sic]</emphasis>
	  </para>
	  <para>
	    You also need to add certain entries to the registry.  The easiest way
	    to do this is to customise the contents of
	    <filename>documentation/psdrv.reg</filename> (see below) and use the
	    Winelib program <command>programs/regapi/regapi</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/documentation/psdrv.reg ~</userinput>
		</para>
	      </listitem>
	      <listitem>
		<para><userinput>vi ~/psdrv.reg</userinput></para>
	      </listitem>
	      <listitem>
		<para>
		  Edit the copy of <filename>psdrv.reg</filename> to suit your
		  requirements.  At a minimum, you must specify a PPD file for
		  each printer.
		</para>
	      </listitem>
	      <listitem>
		<para>
		  <userinput>regapi setValue &lt; ~/psdrv.reg</userinput>
		</para>
	      </listitem>
	    </itemizedlist>
	  </para>
	</sect4>
	<sect4>
	  <title>Required Configuration for all printertypes</title>
	  <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.  (Actually, the driver can use any font that is listed in
	    the PPD file, for which it has an AFM file.  If you use fonts that are
	    <emphasis>not</emphasis> installed in your printer, or in
	    Ghostscript, you will need to use some means of embedding the font in
	    the print job or downloading the font to the printer.  Note also that
	    the driver does not yet properly list required fonts in its DSC
	    comments, so a print manager that depends on these comments to
	    download the proper fonts to the printer may not work properly.)
	  </para>
	  <para>
	    Then create a [afmdirs] section in your
	    <filename>wine.conf</filename> (or
	    <filename>~/.wine/config</filename>) and add a line of the form
	  </para>
	  <screen>
  "dir&lt;n&gt;" = "/unix/path/name/"
	  </screen>
	  <para>
	    for each directory that contains AFM files you wish to use.
	  </para>
	  <para>
	    There usually are a lot of afm files already on your system,
	    within ghostscript, enscript, a2ps or similar programs. You might
	    check (and probably add) the following entries to the [afmdirs]
	    section.
	  </para>
	  <screen>
	    "1" = "/usr/share/ghostscript/fonts"
	    "2" = "/usr/share/a2ps/afm"
	    "3" = "/usr/share/enscript"
	    "4" = "/usr/X11R6/lib/X11/fonts/Type1"
	  </screen>
	  <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>.
	    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 <filename>wine.conf</filename>, this
	    enables printing via external printer drivers and does not
	    affect the builtin 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-doc.sgml" "set" "book" "chapter" "")
End:
-->
