Python使用win32print模块设置打印机

Python通过调用win32print模块,可以实现对已安装的打印机进行一系列管理。首先,你需要安装好Python 2.4 - 3.x和  PyWin32包

然后就可以查看当前电脑上安装了哪些打印机:

import win32print
printers = win32print.EnumPrinters(5)
print printers

这样通过EnumPrinters方法就可以获取,数字大小可以调整,以获取更多或更少的信息。(有关详细信息,请参阅  文档 当然,去MSDN看看,会有更全面的信息)。上述代码会得到类似下面的输出内容:

((8388608, 'PDFCreator,PDFCreator,', 'PDFCreator', 'eDoc Printer'),
(8388608, 'Samsung ML-2250 Series PCL 6,Samsung ML-2250 Series PCL 6,', 'Samsung ML-2250 Series PCL 6', ''), 
(8388608, 'Microsoft XPS Document Writer,Microsoft XPS Document Writer,', 'Microsoft XPS Document Writer', ''))

如您所见,EnumPrinters调用返回一个嵌套元组。每个元素包含了一台打印机信息,其中有两台虚拟打印机(PDF、XPS),如果是网络打印机,最后一个参数将是UNC路径。有时,我们禁用某台打印机,换用另一台,这就需要一种方法来更改用户的打印机设置,指向它的新路径。有了类似上面收集的信息,就很好办了。例如,如果我上面的代码找到了旧网络打印机(带有UNC路径),我可以执行以下操作来换一台打印机:

import win32print
win32print.DeletePrinterConnection('\\\\oldUNC\path\to\printer')
win32print.AddPrinterConnection('\\\\newUNC\path\to\printer')

安装打印机的另一种方法是使用subprocess模块的命令调用:

import subprocess
subprocess.call(r'rundll32 printui.dll PrintUIEntry /in /q /n \\UNC\path\to\printer')

对于使用多台打印机的用户,通常还需要设置默认打印机,这样用户就不会意外地打印到别处。有两种方法可以解决。

如果知道打印机的名称,则可以使用以下命令:

import win32print
win32print.SetDefaultPrinter('EPSON Stylus C86 Series')

在上面的代码中,我将默认设置为Epson。该名称应与Windows中“打印机和传真”对话框中显示的名称完全相同。

另一种方法也是使用subprocess模块的命令调用:

import subprocess
subprocess.call(r'rundll32 printui.dll PrintUIEntry /y /n \\UNC\path\to\printer')

win32print还支持其他许多其他功能。比如,您可以启动和停止打印作业,在打印作业上设置优先级,获取打印机配置,安排作业,等等。

(本文译自:http://www.blog.pythonlibrary.org/2010/02/14/python-windows-and-printers/

  • 3
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值