316 lines
10 KiB
Plaintext
316 lines
10 KiB
Plaintext
<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 the builtin 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>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>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 <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>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 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 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 < ~/psdrv.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 builtin.
|
|
</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 <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:
|
|
-->
|