def task(): # 获取默认打印机的工作状态 printer_name = win32print.GetDefaultPrinter() print(WHERE, "默认打印机", printer_name) handle_printer = win32print.OpenPrinter(printer_name) # 获取打印机句柄 printer_info = win32print.GetPrinter(handle_printer, 2) # 调用相关函数进行信息查询 task_list = win32print.EnumJobs(handle_printer, 0, 10) # 参数(句柄,编文档号,枚举条数) return printer_info["cJobs"] # 获取当前打印机任务数目
def printer_watchdog(): DEFAULT_LOCALE_ENCODING = get_system_encoding() print win32print.EnumPrinters(win32print.PRINTER_ENUM_LOCAL) # get local printers print win32print.EnumPrinters(win32print.PRINTER_ENUM_CONNECTIONS) # get printers which other computer shared default_printer_name = win32print.GetDefaultPrinter() printer = win32print.OpenPrinter(default_printer_name) print win32print.GetPrinter(printer) jobs_list = list() total_seconds = 60 * 5 # reset after 60*5 seconds sleep_seconds = 10 times = total_seconds / sleep_seconds current_times = 0 while True: jobs = win32print.EnumJobs(printer, 0, 3, 1) # 0 is location of first job, # 3 is number of jobs to enumerate, # 1 is job info level, can be 1(win32print.JOB_INFO_1), 2, 3. 3 is reserved, 1 and 2 can NOT get job status, :( if len(jobs) >= 1: for job in jobs: print job.get('pUserName'), job.get('Submitted'), job.get('pMachineName'), \ job.get('pDocument').decode(DEFAULT_LOCALE_ENCODING) jobs_list.append(job.get('JobId', -1)) if any([jid in jobs_list for jid in (jobs[0].get('JobId'), jobs[-1].get('JobId'))]): current_times += 1 if current_times > times: print "printer need to be reset, ... " reset_printer() jobs_list = [] # make sure there are not same job id in list current_times = 0 print 'looks good' time.sleep(sleep_seconds)
def printer_errorneous_state(printer, error_states=PRINTER_ERROR_STATES): prn_opts = win32print.GetPrinter(printer) status_opts = prn_opts[18] for error_state in error_states: if status_opts & error_state: return error_state return 0
def begin_document(self, desc="MSWinPrint.py print job"): # open the printer if self.printer is None: self.printer = win32print.GetDefaultPrinter() self.hprinter = win32print.OpenPrinter(self.printer) # load default settings devmode = win32print.GetPrinter(self.hprinter, 8)["pDevMode"] # change paper size and orientation if self.papersize is not None: devmode.PaperSize = paper_sizes[self.papersize] if self.orientation is not None: devmode.Orientation = orientations[self.orientation] # create dc using new settings self.hdc = win32gui.CreateDC("WINSPOOL", self.printer, devmode) self.dc = win32ui.CreateDCFromHandle(self.hdc) # self.dc = win32ui.CreateDC() # if self.printer is not None: # self.dc.CreatePrinterDC(self.printer) # else: # self.dc.CreatePrinterDC() self.dc.SetMapMode(win32con.MM_TWIPS) # hundredths of inches self.dc.StartDoc(desc) self.pen = win32ui.CreatePen(0, int(scale_factor), 0L) self.dc.SelectObject(self.pen) self.page = 1
def printImage(printer_name, bmp, paperSize=win32con.DMPAPER_A4, tray=None, jobTitle="Untitled"): """ Функция печати изображения по входным параметрам: :param printer_name: имя принтера в windows :param img: :param paperSize: :param tray: пример использования печати на принтере по-умолчанию на формате А4. Источник бумаги - лоток А4 printImage(win32print.GetDefaultPrinter(),filename,win32con.DMPAPER_A4,XEROX_A4_TRAY) """ PRINTER_DEFAULTS = {"DesiredAccess": win32print.PRINTER_ALL_ACCESS} hprinter = win32print.OpenPrinter(printer_name, PRINTER_DEFAULTS) properties = win32print.GetPrinter(hprinter, 2) pr = properties['pDevMode'] if paperSize == win32con.DMPAPER_A2: pr.Orientation = win32con.DMORIENT_LANDSCAPE pr.PaperSize = paperSize if tray: pr.DefaultSource = tray properties['pDevMode'] = pr try: win32print.SetPrinter(hprinter, 2, properties, 0) except pywintypes.error, err: logger.error(err[2].decode('cp1251').encode('utf-8')) sys.exit()
def ImprimirArquivo(numeroPedido, event=None): #Função para Imprimir o Pedido try: # Definindo o caminho do arquivo para impressão arquivo = "C:/Users/Itamar/Documents/GitHub/Sistema-Scripts/pedidos/Pedido" + str( numeroPedido) + '.txt' _printer = StringVar(Pedidos_window) # Setando a impressora padrão do windows _printer.set(win32print.GetDefaultPrinter()) #print(_printer) PRINTER_DEFAULTS = {"DesiredAccess": win32print.PRINTER_ALL_ACCESS} pHandle = win32print.OpenPrinter(_printer.get(), PRINTER_DEFAULTS) properties = win32print.GetPrinter(pHandle, 2) win32print.SetPrinter(pHandle, 2, properties, 0) try: #win32print.SetDefaultPrinter(_printer.get()) win32api.ShellExecute(0, "print", arquivo, None, ".", 0) win32print.ClosePrinter(pHandle) except: pass messagebox.showerror("Error", "Não foi passivel imprimir o pedido.") except: pass messagebox.showerror("Error", "Não foi passivel imprimir o pedido.")
def prepPrt2(): #http://newcenturycomputers.net/projects/pythonicwindowsprinting.html # if you just want to use the default printer, you need # to retrieve its name. printer = win32print.GetDefaultPrinter() # open the printer. hprinter = win32print.OpenPrinter(printer) # retrieve default settings. this code does not work on # win95/98, as GetPrinter does not accept two devmode = win32print.GetPrinter(hprinter, 2)["pDevMode"] # change paper size and orientation # constants are available here: # http://msdn.microsoft.com/library/default.asp? # url=/library/en-us/intl/nls_Paper_Sizes.asp # number 10 envelope is 20 devmode.PaperSize = 20 # 1 = portrait, 2 = landscape devmode.Orientation = 2 # create dc using new settings. # first get the integer hDC value. note that we need the name. hdc = win32gui.CreateDC("WINSPOOL", printer, devmode) # next create a PyCDC from the hDC. dc = win32ui.CreateDCFromHandle(hdc)
def init_printer(): name = win32print.GetDefaultPrinter() print "printer name: " + name # printdefaults = {"DesiredAccess": win32print.PRINTER_ACCESS_ADMINISTER} printdefaults = {"DesiredAccess": win32print.PRINTER_ACCESS_USE} handle = win32print.OpenPrinter(name, printdefaults) level = 2 attributes = win32print.GetPrinter(handle, level) print "Old Duplex = %d" % attributes['pDevMode'].Duplex # attributes['pDevMode'].Duplex = 1 # no flip attributes['pDevMode'].Duplex = 2 # flip up # attributes['pDevMode'].Duplex = 3 # flip over ## 'SetPrinter' fails because of 'Access is denied.' ## But the attribute 'Duplex' is set correctly try: win32print.SetPrinter(handle, level, attributes, 0) except: print "win32print.SetPrinter: set 'Duplex'" return name, printdefaults, handle, attributes
def test_printer_levels_read_dummy(self): if not self.local_printers: print("Test didn't run (no local printers)!") return ph = wprn.OpenPrinter(self.local_printers[self.printer_idx][2]) for level in self.printer_levels_all: wprn.GetPrinter(ph, level)
def printer_watchdog(): print win32print.EnumPrinters(win32print.PRINTER_ENUM_LOCAL) # get local printers print win32print.EnumPrinters(win32print.PRINTER_ENUM_CONNECTIONS) # get printers which other computer shared default_printer_name = win32print.GetDefaultPrinter() printer = win32print.OpenPrinter(default_printer_name) print win32print.GetPrinter(printer) jobs_list = list() total_seconds = 60 * 5 # reset after 60*5 seconds, see 'known issue 2' in this file. sleep_seconds = 10 times = total_seconds / sleep_seconds current_times = 0 while True: jobs = win32print.EnumJobs(printer, 0, 3, 1) # except: pywintypes.error: (1722, 'EnumJobs', 'RPC 服务器不可用。'), ignored this except # 0 is location of first job, # 3 is number of jobs to enumerate, # 1 is job info level, can be 1(win32print.JOB_INFO_1), 2, 3. 3 is reserved, 1 and 2 can NOT get job status, :( if len(jobs) >= 1: for job in jobs: filename = job.get('pDocument') job_id = job.get('JobId', md5(filename).hexdigest()) job_status = job.get('Status', 0) if job_status in [0x00000002, 0x00000004, 0x00000800]: # JOB_STATUS_ERROR """ Refers: https://docs.microsoft.com/en-us/windows/desktop/printdocs/job-info-2 ~\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\WinSDK\Include\WinSpool.h """ print "printer need to be reset, ... " reset_printer() jobs_list = [] # make sure there are not same job id in list current_times = 0 print "Current job: ", job_id, job.get('pUserName'), job.get('Submitted'), job.get( 'pMachineName'), filename, "[ %d/%d ]" % (times, current_times + 1) jobs_list.append(job_id) # if any([jid in jobs_list for jid in (jobs[0].get('JobId'), jobs[-1].get('JobId'))]): # current_times += 1 if Counter(jobs_list).most_common(1)[0][1] > 1: current_times += 1 if current_times > times: """ KNOWN ISSUE 2: It will reset when a document sends lots of pages to printer. This script may reset printer before job finished which is not expected. """ print "printer need to be reset, ... " reset_printer() jobs_list = [] # make sure there are not same job id in list current_times = 0 else: jobs_list = [] current_times = 0 print 'looks good, keep watching ...' time.sleep(sleep_seconds)
def StartPrint (printer='MyPSPrinter', path=r'D:\test.txt', copies = 1, orientation = win32con.DMORIENT_PORTRAIT, duplex = win32con.DMDUP_HORIZONTAL, printQuality = win32con.DMRES_HIGH, color = win32con.DMCOLOR_MONOCHROME, paperSize = win32con.DMPAPER_LETTER, # or DMPAPER_A4 text=None): PRINTER_DEFAULTS = {"DesiredAccess": win32print.PRINTER_ALL_ACCESS} h_printer = win32print.OpenPrinter(printer, PRINTER_DEFAULTS) properties = win32print.GetPrinter(h_printer, 2) devmode = properties["pDevMode"] devmode.FormName = 'A4' # or 'Letter' devmode.PaperSize = paperSize devmode.Orientation = orientation devmode.PrintQuality = printQuality devmode.Color = color devmode.TTOption = win32con.DMTT_SUBDEV devmode.Scale = 100 devmode.Copies = copies devmode.Duplex =duplex devmode.Fields |= (win32con.DM_FORMNAME | win32con.DM_PAPERSIZE | win32con.DM_ORIENTATION | win32con.DM_PRINTQUALITY | win32con.DM_COLOR | win32con.DM_TTOPTION | win32con.DM_SCALE) properties['pDevMode'] =devmode win32print.SetPrinter(h_printer, 2, properties, 0) win32print.SetDefaultPrinter(printer) try: listOfFiles = os.listdir(path) if (len(listOfFiles)!=0): for file in listOfFiles: filename = path+'\\'+file print(filename) print(win32api.ShellExecute( 0, "printto", filename, '"%s"' % win32print.GetDefaultPrinter(), ".", 0 )) print_jobs = win32print.EnumJobs(h_printer, 0, -1, 2) delete = True while (delete): old_print_jobs = print_jobs print_jobs = win32print.EnumJobs(h_printer, 0, -1, 2) if((len(print_jobs) == 0) & (len(old_print_jobs)!=0)): print('ok') delete = False filename = path+'\\'+file os.remove(filename) except FileNotFoundError: print('Directory not created.')
def get_printer_info(name): printer = win32print.OpenPrinter(name) try: printer_info = win32print.GetPrinter(printer) finally: win32print.ClosePrinter(printer) return printer_info
def EnumPrinter(self): handle = win32print.OpenPrinter(self.printer_name) win32print.GetPrinter(handle) win32print.ClosePrinter(handle) printers = [] for p in win32print.EnumPrinters(2): printers.append(p[1].split(',')[0]) return printers
def printdoc(filename): handle = win32print.OpenPrinter(win32print.GetDefaultPrinter()) status1 = 1024 # 初始化为1024表示忙 0是空闲状态 status2 = 2 # 打印机队列数 while (status1 == 1024) and (status2 >= 2): statusqueue = (win32print.GetPrinter(handle)) status1 = statusqueue[-3] status2 = statusqueue[-2] print(" 等待中,打印队列" + str(status2) + "文档") time.sleep(1) continue print("开始打印" + filename) win32api.ShellExecute(0, 'print', filename, win32print.GetDefaultPrinterW(), ".", 0) while ((win32print.GetPrinter(handle)[-2]) != (status2 +1)): time.sleep(1) print("等待打印机反馈") os.remove(filename)
def PrinterReady(self): if self.hPrinter == None: return False t = win32print.GetPrinter(self.hPrinter) if t[18] == 0: return True else: # print "printer not ready %d" % t[18] return False
def printer_watchdog(): # DEFAULT_LOCALE_ENCODING = get_system_encoding() print win32print.EnumPrinters( win32print.PRINTER_ENUM_LOCAL) # get local printers print win32print.EnumPrinters(win32print.PRINTER_ENUM_CONNECTIONS ) # get printers which other computer shared default_printer_name = win32print.GetDefaultPrinter() printer = win32print.OpenPrinter(default_printer_name) print win32print.GetPrinter(printer) jobs_list = list() total_seconds = 60 * 5 # reset after 60*5 seconds, see 'known issue 2' in this file. sleep_seconds = 10 times = total_seconds / sleep_seconds current_times = 0 while True: jobs = win32print.EnumJobs(printer, 0, 3, 1) # 0 is location of first job, # 3 is number of jobs to enumerate, # 1 is job info level, can be 1(win32print.JOB_INFO_1), 2, 3. 3 is reserved, 1 and 2 can NOT get job status, :( if len(jobs) >= 1: for job in jobs: filename = job.get('pDocument') job_id = job.get('JobId', md5(filename).hexdigest()) print "Current job: ", job_id, job.get('pUserName'), job.get( 'Submitted'), job.get( 'pMachineName'), filename, "[ %d/%d ]" % ( times, current_times + 1) jobs_list.append(job_id) # if any([jid in jobs_list for jid in (jobs[0].get('JobId'), jobs[-1].get('JobId'))]): # current_times += 1 if Counter(jobs_list).most_common(1)[0][1] > 1: current_times += 1 if current_times > times: """ KNOWN ISSUE 2: It will reset when a document sends lots of pages to printer. This script may reset printer before job finished which is not expected. """ print "printer need to be reset, ... " reset_printer() jobs_list = [] # make sure there are not same job id in list current_times = 0 else: jobs_list = [] current_times = 0 print 'looks good, keep watching ...' time.sleep(sleep_seconds)
def prepPrt(): # Setting paper tray PRINTER_DEFAULTS = {"DesiredAccess":win32print.PRINTER_ALL_ACCESS} pHandle = win32print.OpenPrinter('RICOH-LOCAL', PRINTER_DEFAULTS) properties = win32print.GetPrinter(pHandle, 2) #get the properties pDevModeObj = properties["pDevMode"] #get the devmode tray_one = 1 tray_two = 3 tray_three = 2 printer_tray = [] automaticTray = 7 pDevModeObj.DefaultSource = tray_two #set the tray properties["pDevMode"]=pDevModeObj #write the devmode back to properties win32print.SetPrinter(pHandle,2,properties,0) #save the properties to the printer
def set_duplex(printer_no, duplex): print_defaults = {"DesiredAccess": win32print.PRINTER_ALL_ACCESS} handle = win32print.OpenPrinter(app_config.PRINTER_NAMES[printer_no], print_defaults) level = 2 attributes = win32print.GetPrinter(handle, level) attributes['pDevMode'].Duplex = duplex try: win32print.SetPrinter(handle, level, attributes, 0) except Exception as e: print('Failed to set duplex') print(e) finally: win32print.ClosePrinter(handle)
def cfgPrt(selPrt): p = win32print.OpenPrinter(selPrt) printprocessor = win32print.GetPrinter(p, 2)['pPrintProcessor'] dmsize = win32print.DocumentProperties(0, p, selPrt, None, None, 0) driverextra = dmsize - pywintypes.DEVMODEType().Size dm = pywintypes.DEVMODEType(driverextra) dm.Fields = dm.Fields | win32con.DM_ORIENTATION | win32con.DM_COPIES #|win32con.DM_PAPERSIZE dm.Orientation = win32con.DMORIENT_LANDSCAPE dm.Copies = 1 #dm.Papersize=win32con.DM_PAPERLENGTH(790) #dm.Paperwidth=530 win32print.DocumentProperties( 0, p, selPrt, dm, dm, win32con.DM_IN_BUFFER | win32con.DM_OUT_BUFFER) hDC = win32gui.CreateDC(printprocessor, selPrt, dm) printerwidth = win32ui.GetDeviceCaps(hDC, 110) printerheight = win32ui.GetDeviceCaps(hDC, 111)
def SetPrinter(self, printer, isPortrait): self.printer_name = printer # self.printer_name = 'Microsoft Print to PDF' # self.printer_name = 'HP LaserJet MFP M28-M31 PCLm-S (Network)' self.device = win32print.OpenPrinter(printer) self.devmode = win32print.GetPrinter(self.device, 2)["pDevMode"] print('paper size:', self.devmode.PaperSize) # http://timgolden.me.uk/pywin32-docs/PyDEVMODE.html # 1 = portrait, 2 = landscape self.devmode.Orientation = 1 if isPortrait else 2 self.devmode.PaperSize = 10 # A4 = 10 # self.devmode.PaperLength = 4 # self.devmode.PaperWidth = 4 self.hdc = win32gui.CreateDC("WINSPOOL", self.printer_name, self.devmode) self.dc = win32ui.CreateDCFromHandle(self.hdc)
def get_printer_stats(): data = get_printers() offline_data = [] for tup in data: handle = win32print.OpenPrinter(tup[2], {"DesiredAccess": win32print.PRINTER_ALL_ACCESS}) try: status = win32print.GetPrinter(handle) if status[18] >= 8192: offline_data.append(1) else: offline_data.append(0) except Exception as e: print(e) count_1 = offline_data.count(1) count_0 = offline_data.count(0) if count_1 > count_0: return 1 return 0
def do_print_qu(): str1=current_textarea.get("0.0","end") pname=win32print.GetDefaultPrinter() pHandle=win32print.OpenPrinter(pname) printinfo=win32print.GetPrinter(pHandle,2) pDevModeObj=printinfo["pDevMode"] pDevModeObj.Scale=100 DC=win32gui.CreateDC("WINSPOOL",pname,pDevModeObj) hDC= win32ui.CreateDCFromHandle(DC) hDC.StartDoc("Python Editor") hDC.StartPage() hDC.TextOut(20,20,str1) hDC.EndPage() hDC.EndDoc() win32gui.DeleteDC(DC)
def prepPrtTray(): # Constants from wingdi.h DM_OUT_BUFFER = 0x02 DM_IN_BUFFER = 0x08 DM_IN_PROMPT = 0x04 DM_DEFAULT_SOURCE = 0x200 # Get a handle for the default printer device_name = win32print.GetDefaultPrinter() handle = win32print.OpenPrinter(device_name) # Get the default properties for the printer properties = win32print.GetPrinter(handle, 2) devmode = properties['pDevMode'] # Print the default paper source (prints '7' for 'Automatically select') print(devmode.DefaultSource) # Change the default paper source to '4' for 'Manual feed' devmode.DefaultSource = 4 devmode.Fields = devmode.Fields | DM_DEFAULT_SOURCE # Write these changes back to the printer win32print.DocumentProperties(None, handle, device_name, devmode, devmode, DM_IN_BUFFER | DM_OUT_BUFFER) # Confirm the changes were updated print(devmode.DefaultSource) # Aaargh! Prints '7' again! # Start printing with the device hdc = win32gui.CreateDC('', device_name, devmode) win32print.StartDoc(hdc, ('Test', None, None, 0)) win32print.StartPage(hdc) # ... GDI drawing commands ... win32print.EndPage(hdc) win32print.EndDoc(hdc)
def PrintAction(event=None): PRINTER_DEFAULTS = {"DesiredAccess": win32print.PRINTER_ALL_ACCESS} pHandle = win32print.OpenPrinter(_printer.get(), PRINTER_DEFAULTS) properties = win32print.GetPrinter(pHandle, 2) properties['pDevMode'].Color = 1 if str(_color.get()) == "Color" else 2 properties['pDevMode'].Copies = 1 win32print.SetPrinter(pHandle, 2, properties, 0) if not _filename: messagebox.showerror("Error", "No File Selected") return elif not _printer.get(): messagebox.showerror("Error", "No Printer Selected") return try: #win32print.SetDefaultPrinter(_printer.get()) win32api.ShellExecute(0, "print", _filename, None, ".", 0) win32print.ClosePrinter(pHandle) except: pass messagebox.showerror("Error", "There was an error printing the file :(")
def get_status(self, **params): messages = [] self.open_printer() if not self.device: status = "disconnected" elif device_type == "serial": # Maybe we could do something here to start serial status = "connected" elif device_type == "usb": try: if self.is_online(): status = "connected" else: status = "connecting" # if res['printer']['status_error']: # status = 'error' # messages.append( # 'Error code: %i' % res['printer']['status_error']) except Exception as err: status = "error" self.device = False messages.append("Error: %s" % err) else: state = win32print.GetPrinter(self.device, 2) if state["Status"] in [ win32print.PRINTER_STATUS_OFFLINE, win32print.PRINTER_STATUS_NOT_AVAILABLE, ]: status = "disconnected" else: status = "connected" self.close() return { "status": status, "messages": messages, }
interface = ShoppingListInterface() # if you just want to use the default printer, you need # to retrieve its name. printer = win32print.GetDefaultPrinter() # open the printer. import win32ui from win32con import DMPAPER_A5, DMPAPER_A5_ROTATED, DMRES_MEDIUM, DMRES_LOW hprinter = win32print.OpenPrinter('HP Deskjet 2540 series (sieć)') # hprinter = win32print.OpenPrinter('Microsoft Print to PDF') # retrieve default settings. this code does not work on # win95/98, as GetPrinter does not accept two devmode = win32print.GetPrinter(hprinter, 2)["pDevMode"] # change paper size and orientation # constants are available here: # http://msdn.microsoft.com/library/default.asp? # url=/library/en-us/intl/nls_Paper_Sizes.asp # number 10 envelope is 20 devmode.PaperSize = DMPAPER_A5 devmode.PrintQuality = 300 # devmode.YResolution = 300 # devmode.XResolution = 300 # devmode.FormName=u'a5' # 1 = portrait, 2 = landscape devmode.Orientation = 1 # create dc using new settings.
import base64 raw_data=base64.b64decode(data) if raw_data: h = win32print.OpenPrinter(p) hJob = win32print.StartDocPrinter (h, 1, ("KwickPOS Ticket", None, "RAW")) win32print.StartPagePrinter (h) b=win32print.WritePrinter (h, raw_data) win32print.EndPagePrinter (h) win32print.EndDocPrinter (h) win32print.ClosePrinter (h) print(b) sys.exit() else: try: h = win32print.OpenPrinter(p) d = win32print.GetPrinter(h,2) win32print.ClosePrinter (h) a = d['Attributes'] hex=hex(a) if ( hex[-3] == '6' ): print(p+' Offline') sys.exit() s = d['Status'] if ( s == 1 ): print(p+' Paused') sys.exit() print(p+' Ready') except pywintypes.error: print(p+' No Such Printer') else: import json
def rtrvPrtInfo(handle, level=2): return win32print.GetPrinter(handle, level), level
import win32print, pywintypes, win32con, win32gui, win32api pname = win32print.GetDefaultPrinter() print(pname) p = win32print.OpenPrinter(pname) print('Printer handle: ', p) print_processor = win32print.GetPrinter(p, 2)['pPrintProcessor'] ## call with last parm set to 0 to get total size needed for printer's DEVMODE dmsize = win32print.DocumentProperties(0, p, pname, None, None, 0) ## dmDriverExtra should be total size - fixed size driverextra = dmsize - pywintypes.DEVMODEType( ).Size ## need a better way to get DEVMODE.dmSize dm = pywintypes.DEVMODEType(driverextra) dm.Fields = dm.Fields | win32con.DM_ORIENTATION | win32con.DM_COPIES dm.Orientation = win32con.DMORIENT_LANDSCAPE dm.Copies = 2 win32print.DocumentProperties(0, p, pname, dm, dm, win32con.DM_IN_BUFFER | win32con.DM_OUT_BUFFER) pDC = win32gui.CreateDC(print_processor, pname, dm) printerwidth = win32print.GetDeviceCaps(pDC, win32con.PHYSICALWIDTH) printerheight = win32print.GetDeviceCaps(pDC, win32con.PHYSICALHEIGHT) hwnd = win32gui.GetDesktopWindow() l, t, r, b = win32gui.GetWindowRect(hwnd) desktopheight = b - t desktopwidth = r - l dDC = win32gui.GetWindowDC(hwnd) dcDC = win32gui.CreateCompatibleDC(dDC) dcBM = win32gui.CreateCompatibleBitmap(dDC, desktopwidth, desktopheight)
import win32con #because we use MM_TWIPS: inch = 1440.0 mm = inch / 25.4 jobName="test" printerName=win32print.GetDefaultPrinter() spoolFile=r"c:\tmp.ps" # open the printer. hprinter = win32print.OpenPrinter(printerName) # retrieve default settings. this code has complications on # win95/98, I'm told, but I haven't tested it there. props = win32print.GetPrinter(hprinter,2) devmode=props["pDevMode"] if devmode is None: # workaround, see http://lino.saffre-rumma.ee/news/477.html print "%r has no pDevMode property" % props else: # change paper size and orientation # constants are available here: # http://msdn.microsoft.com/library/default.asp?\ # url=/library/en-us/intl/nls_Paper_Sizes.asp devmode.PaperSize = win32con.DMPAPER_A4 devmode.Orientation = win32con.DMORIENT_PORTRAIT # create dc using new settings. # first get the integer hDC value.