我想编写一个python脚本,在我的激光打印机上打印文件夹中的每个文件。 应该可以打开和关闭双面打印模式。 通过文件名称进行解除。如果文件名前面有D,则它是双工,如果有S,则它是单工。 到目前为止我还没有实现。
我的问题是如何告诉打印机使用双工模式?
这是我的代码
from os import path
from os import listdir
from os.path import isfile, join
import win32api
import win32print
mypath = r"D:\\test"
#list all the files in a folder
files = [ f for f in listdir(mypath) if isfile(join(mypath,f)) ]
print files
for file in files:
file = mypath + "\\" + file
## if "11x17" in file and "County" in file:
win32api.ShellExecute (
0,
"print",
file,
#
# If this is None, the default printer will
# be used anyway.
#
'/d:"%s"' % win32print.GetDefaultPrinter (),
".",
0
)
del files
del mypath
另一种选择(我必须为所有文件添加循环)
from subprocess import call
acrobat = "C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe" ## Acrobat reader would also work, apparently
file = "D:\\Test\\test.pdf"
printer = "gDoc Creator"
call([acrobat, "/T", file, printer])
现在我知道这个存在
#Lists properties and capabilities for all the printers installed on a computer.
import win32com.client
strComputer = "."
objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator")
objSWbemServices = objWMIService.ConnectServer(strComputer,"root\cimv2")
colItems = objSWbemServices.ExecQuery("Select * from Win32_PrinterConfiguration")
for objItem in colItems:
print "Duplex: ", objItem.Duplex
此值可以为TRUE和FALSE,但是当我想用我的脚本打印时,有没有办法发送它?
提前向你提供帮助。答案 0 :(得分:1)
您可以通过更改DevMode
对象的相应属性来配置双工设置。此对象还有其他常见属性,如颜色设置(黑色和白色/颜色/ ..)和页面方向(lanscape /肖像)。请注意,这在get / set操作中效果最佳:
>>> import win32print
>>> name = win32print.GetDefaultPrinter() # verify that it matches with the name of your printer
>>> printdefaults = {"DesiredAccess": win32print.PRINTER_ALL_ACCESS} # Doesn't work with PRINTER_ACCESS_USE
>>> handle = win32print.OpenPrinter(name, printdefaults)
>>> level = 2
>>> attributes = win32print.GetPrinter(handle, level)
>>> attributes['pDevMode'].Duplex
0
>>> attributes['pDevMode'].Duplex = 1
>>> win32print.SetPrinter(handle, level, attributes, 0)
>>> win32print.GetPrinter(handle, level)['pDevMode'].Duplex
1
虽然official Windows dev center documentation提到您可以在第3行使用PRINTER_ACCESS_MANAGE_LIMITED
,但win32print
没有更多限制(但基本上只需要)全局变量。因此,您需要完整访问权限。
请注意,您还可以print using win32print
,从而避免使用subprocess.call
或"炮轰"使用win32api
。
显然,这仅适用于MS Windows。
配置好打印机后,例如在双工模式下,您可以向其发送标记为双面打印作业的所有文档的列表。然后,您可以完全类似于上面的代码更改设置,并对Simplex队列执行相同的操作。