Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
727 views
in Technique[技术] by (71.8m points)

winapi - Python win32print changing advanced printer options

I am using python 2.7 and win32print. I can successfully change the orientation between portrait and landscape:

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) 

However, I want to change some of the custom properties for my printer but can't seem to find where to do this. This is one of the tabs I want to change: http://dl.dropbox.com/u/584330/print.jpg. I believe that these options are accessible when one enables the "advanced printing features option".

Additional info (code):

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

Output:

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>

[edit] I just tried the following code:

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

This would pop up the properties window I want to modify.

Also, do you know if it is possible to ask a printer to stop printing once it hit say 300 pages?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
from ctypes import windll
windll['winspool.drv'].AdvancedDocumentPropertiesA(None, pHandle.handle, '300LN1', None, None)

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...