Python win32print 更改高级打印机选项

14 投票
1 回答
6719 浏览
提问于 2025-04-16 15:08

我正在使用Python 2.7和win32print库。我可以成功地在纵向和横向之间切换打印方向:

PRINTER_DEFAULTS = {"DesiredAccess":win32print.PRINTER_ALL_ACCESS}  
pHandle = win32print.OpenPrinter('300LN1', PRINTER_DEFAULTS)  
properties = win32print.GetPrinter(pHandle, 2)  
pDevModeObj.Orientation = 2  
properties["pDevMode"]=pDevModeObj   
win32print.SetPrinter(pHandle,2,properties,0) 

不过,我想更改打印机的一些自定义属性,但不知道在哪里可以做到这一点。这是我想更改的一个选项卡:http://dl.dropbox.com/u/584330/print.jpg。我相信这些选项在启用“高级打印功能”选项时可以访问。

附加信息(代码):

devmode=pDevModeObj  
for n in dir(devmode):  
  print "%s\t%s" % (n,getattr(devmode,n))  

输出:

BitsPerPel  0
Clear   <built-in method Clear of PyDEVMODEA object at 0x028EE750>
Collate 1
Color   2
Copies  1
DefaultSource   15
DeviceName  300LN1
DisplayFixedOutput  19660815
DisplayFlags    1
DisplayFrequency    0
DisplayOrientation  65636
DitherType  4294967295
DriverData  DINU"    DriverExtra    824
DriverVersion   1536
Duplex  1
Fields  92401475
FormName    Letter
ICMIntent   2
ICMMethod   1
LogPixels   0
MediaType   1
Nup 1
Orientation 2
PanningHeight   0
PanningWidth    0
PaperLength 2794
PaperSize   1
PaperWidth  2159
PelsHeight  0
PelsWidth   0
Position_x  65538
Position_y  141495018
PrintQuality    300
Reserved1   0
Reserved2   0
Scale   100
Size    156
SpecVersion 1025
TTOption    2
YResolution 300
__class__   <type 'PyDEVMODEA'>
__delattr__ <method-wrapper '__delattr__' of PyDEVMODEA object at 0x028EE750>
__doc__ None
__format__  <built-in method __format__ of PyDEVMODEA object at 0x028EE750>
__getattribute__    <method-wrapper '__getattribute__' of PyDEVMODEA object at 0x028EE750>
__hash__    <method-wrapper '__hash__' of PyDEVMODEA object at 0x028EE750>
__init__    <method-wrapper '__init__' of PyDEVMODEA object at 0x028EE750>
__new__ <built-in method __new__ of type object at 0x1E7B9970>
__reduce__  <built-in method __reduce__ of PyDEVMODEA object at 0x028EE750>
__reduce_ex__   <built-in method __reduce_ex__ of PyDEVMODEA object at 0x028EE750>
__repr__    <method-wrapper '__repr__' of PyDEVMODEA object at 0x028EE750>
__setattr__ <method-wrapper '__setattr__' of PyDEVMODEA object at 0x028EE750>
__sizeof__  <built-in method __sizeof__ of PyDEVMODEA object at 0x028EE750>
__str__ <method-wrapper '__str__' of PyDEVMODEA object at 0x028EE750>
__subclasshook__    <built-in method __subclasshook__ of type object at 0x1E7B9970>

[编辑] 我刚刚尝试了以下代码:

win32print.DocumentProperties(0, pHandle, '300LN1', None, None, 5)

这将弹出我想要修改的属性窗口。

另外,你知道是否可以让打印机在打印到300页时停止打印吗?

1 个回答

1

在编程中,有时候我们会遇到一些问题,可能是因为代码写得不够清晰,或者是我们对某些概念理解得不够透彻。比如,有人可能在使用某个函数时,发现它的表现和预期不一样,这时候就需要仔细检查代码,看看是不是哪里出了问题。

另外,编程的世界里有很多工具和库可以帮助我们完成任务,但如果不熟悉这些工具的用法,可能会导致一些困惑。因此,学习如何使用这些工具,以及理解它们的工作原理,是非常重要的。

总之,编程就像解谜一样,有时候需要耐心和细心去找出问题所在,才能顺利解决它。

from ctypes import windll
windll['winspool.drv'].AdvancedDocumentPropertiesA(None, pHandle.handle, '300LN1', None, None)

撰写回答