4.9. 在 Wine 中打印

在 Wine 中如何打印文档...

4.9.1. 打印

编写:Huw D M Davies

(提取自 wine/documentation/printing)

在 Wine 中打印可以通过两种方式。它们二者都在 alpha 阶段。

 

  1. 使用一个外部的 windows 3.1 打印机驱动程序。

  2. 使用内置的 Wine Postscript 驱动程序(+ ghostscript 为非 postscript 打印机生成输出)。

注意现在 WinPrinter(廉价,要求宿主计算机显式的控制打印头的哑巴打印机) 不能与它们的 Windows 打印机驱动程序一起工作。不清楚它们以后是否会。

4.9.1.1. 外部打印机驱动程序

现在只有 16 bit 驱动程序可以工作(注意这包括 win9x 驱动程序)。要使用它们,添加

printer=on
        

wine.conf (or ~/.wine/config) 的 [wine] 段。如果 CreateDC 的驱动程序参数是一个 16 bit 驱动程序,这个选项让它继续进行(proceed)。你可能还需要添加

"TTEnable" = "0" "TTOnly" = "0"
        

~/.wine/config 的 [TrueType] 段。给驱动程序接口的这个代码在 graphics/win16drv 中。

4.9.1.2. 内置 Wine PostScript 驱动程序

通过把一个驱动程序内置到 Wine 中启用 PostScript 文件打印。参见下面的安装指导。给 PostScript 驱动程序的代码在 graphics/psdrv 中。

4.9.1.3. 缓冲池

缓冲池(Spooling)是非常原始的。wine.conf 的 [spooler] 段把一个端口 (比如,LPT1:) 映射到一个文件上或通过一个管道映射一个命令上。例如下面的一行

"LPT1:" = "foo.ps" "LPT2:" = "|lpr"
        

LPT1: 映射到文件 foo.ps 而把 LPT2: 映射到 lpr 命令。如果一个作业被发送到一个未列出的端口,则建立以这个端口为名字的文件,比如为 LPT3: 建立一个叫 LPT3: 的文件。

4.9.2. Wine PostScript 驱动程序

编写:Huw D M Davies

(提取自 wine/documentation/psdriver)

当完成了这些的过程时候就允许 Wine 生成 PostScript 文件而不需要一个外部的打印机驱动程序。应该可以通过 ghostscript 过滤输出来打印到一个非 PostScript 打印机。

4.9.2.1. 介绍

驱动程序在被建造在 Wine 当中的时候表现的如同它就是一个叫做 wineps.drv 的 DRV 文件。尽管它模仿一个 16 bit 驱动程序,但如同 win9x 驱动程序那样,它可以与 16 和 32 bit 应用程序二者一起工作。

要安装它则添加

"Wine PostScript Driver" = "WINEPS,LPT1:"
        

win.ini 的 [devices] 段和

"Wine PostScript Driver" = "WINEPS,LPT1:,15,45"
        

到 [PrinterPorts] 段来设置它为缺省的打印机,还要添加

"device" = "Wine PostScript Driver,WINEPS,LPT1:"
        

~/.wine/config 的 [windows] 段和 ??? [sic]

你还需要向注册表添加特定的条目。最简单的方式是定制 documentation/psdrv.reg 的内容(见后)并使用 Winelib 程序 programs/regapi/regapi。例如,如果你把 Wine 源代码树安装在 /usr/src/wine 中,你可以使用下列命令系列:

 

  • cp /usr/src/wine/documentation/psdrv.reg ~

  • vi ~/psdrv.reg

  • 编辑 psdrv.reg 的复件来适合你的要求。作为一个最小化,你必须为每个打印机指定一个 PPD 文件。

  • regapi setValue < ~/psdrv.reg

你需要给你想使用的(type 1 PostScript)字体的 Adobe Font Metric (AFM) 文件。你可以从 ftp://ftp.adobe.com/pub/adobe/type/win/all/afmfiles 得到它们。目录 base17base35 是开始的好地方。 注意它们只是字体矩阵而不是字体本身。现在这个驱动程序不下载额外的字体,所以你只能使用载这个打印机上存在的字体。(实际上,驱动程序可以使用在 PPD 文件中列出的任何字体,对于每个字体它都有一个 AFM 文件。如果你使用的字体在你的打印机中或在 Ghostscript 中安装,你需要使用一些方式来把字体嵌入到打印作业中或把字体下载到打印机中。还要注意仍不能在它的 DSC 注释中正确的列出要求的字体,所以依赖于这些注释来下载正确的字体到打印机的一个打印管理器可能不能正确的工作。)

接着在你的 wine.conf (或 ~/.wine/config) 中建立 [afmdirs] 段并为每个包含你要使用的 AFM 文件的目录添加下列形式的一行:

"dir<n>" = "/unix/path/name/"
        

你还需要给你的打印机的一个 PPD 文件。它描述这个打印机的特定特征。比如安装了那些字体,如何手动进纸(feed)等。Adobe 在它自己的 web 站点上有许多这种文件,看一下 ftp://ftp.adobe.com/pub/adobe/printerdrivers/win/all/。 参见上面的信息来配置驱动程序使用这个文件。

要启用彩色打印机你需要把在 PPD 中的 *ColorDevice 条目设置为 true,否则驱动程序将生成灰度的输出。

注意你不需要在 wine.conf 的 [wine] 段中设置 printer=on,它启用通过外部打印机驱动程序的打印,而不影响内置的 PostScript 驱动驱动程序。

如果你走运的话现在就可以从 Wine 生成 PS 文件了!

我测试它使用了 win3.1 notepad/write、Winword6 、Origin4.0,和 32 bit 应用程序如 win98 wordpad、Winword97、Powerpoint2000,有着一定程度的成功 - 你应当可以弄出点什么东西,它可能不在适当的位置。

4.9.2.2. 要做/缺陷

 

  • 驱动程序读 PPD 文件,但忽略所有约束并不让你指定你是否有额外的东西比如信封进纸器(feeder)。 你将在打印设置对话框中发现输入箱(bin)比一般选择更大。我只真正测试了在 hp4m6_v1.ppd 文件上的 ppd 分析。

  • 没有 TrueType 下载。

  • StretchDIBits 使用 level 2 PostScript。

  • 高级设置对话框。

  • 许多功能的部分实现。

  • ps.c 正在变得混乱(messy)。

  • Notepad 开始文本经常比边距(margin)设置要左许多。但是 win3.1 pscript.drv (在 wine 下)也是这样。

  • 可能更多...

如果你想得到帮助请与我联系这样我们可以避免重复。

Huw D M Davies