Python呼叫Windows命令列印檔案
阿新 • • 發佈:2020-02-10
1、Python呼叫Windows命令列印檔案
Windows命令列列印檔案使用print 命令,具體用法可使用help print檢視。下面是使用Python呼叫print指令執行列印檔案功能的程式碼:
import os def printer(filename): printername = r"/D:\\A340\hpLaser" cmd = "print " + printername + " " + filename print "print cmd:",cmd if not os.system(cmd): print "printing..." else: print "some error occurs." if __name__ == "__main__": filename = raw_input("Please input your filename:\n") printer(filename)
這裡的印表機用的是共享印表機,所以需要指定域名和印表機名稱,而且"/D:"表示的是列印裝置的意思。
2、windows下如何用python控制印表機列印
參考網站
首先下載python需要的庫
pip install pypiwin32
簡單例子
import tempfile import win32api import win32print filename = tempfile.mktemp (".txt") open (filename,"w").write ("This is a test") win32api.ShellExecute ( 0,"print",filename,# # If this is None,the default printer will # be used anyway. # '/d:"%s"' % win32print.GetDefaultPrinter (),".",0 )
import win32print import win32ui import win32con def print2Printer(): INCH = 1440 hDC = win32ui.CreateDC () hDC.CreatePrinterDC (win32print.GetDefaultPrinter ()) hDC.StartDoc ("Test doc") hDC.StartPage () hDC.SetMapMode (win32con.MM_TWIPS) hDC.DrawText ("TEST HELLO WORLD! CORSS FIREWALL,WE TOUCH THE WORLD!",(0,INCH * -1,INCH * 8,INCH * -2),win32con.DT_CENTER) hDC.EndPage () hDC.EndDoc () print2Printer()
若在hDC.DrawText()中傳的是空字串,則可以實現空走紙。
但實際上這只是列印自己制定的字串, 並且打印出來會顯示txt的檔名。所以我更傾向於使用windows的cmd指令列印指定檔案。
3、Python利用win32連線印表機自動列印
import win32print import win32ui from PIL import Image,ImageWin #物理寬度、高度 PHYSICALWIDTH = 110 PHYSICALHEIGHT = 111 #物理偏移位置 PHYSICALOFFSETX = 112 PHYSICALOFFSETY = 113 printer_name = win32print.GetDefaultPrinter () #選擇圖片路徑 file_name = “biaoqian.png” hDC = win32ui.CreateDC () hDC.CreatePrinterDC (printer_name) printer_size = hDC.GetDeviceCaps (PHYSICALWIDTH),hDC.GetDeviceCaps (PHYSICALHEIGHT) #printer_margins = hDC.GetDeviceCaps (PHYSICALOFFSETX),hDC.GetDeviceCaps (PHYSICALOFFSETY) #開啟圖片 bmp = Image.open (file_name) print(bmp.size) ratios = [1.0 * 1754 / bmp.size[0],1.0 * 1240 / bmp.size[1]] scale = min (ratios) print(ratios) print(scale) hDC.StartDoc (file_name) hDC.StartPage () dib = ImageWin.Dib (bmp) scaled_width,scaled_height = [int (scale * i) for i in bmp.size] print(scaled_width,scaled_height) x1 = int ((printer_size[0] - scaled_width) / 2) y1 = int ((printer_size[1] - scaled_height) / 2) #橫向位置座標 x1 = 1580 #豎向位置座標 y1 = 30 #4倍為自適應圖片實際尺寸列印 x2 = x1 + bmp.size[0]*4 y2 = y1 + bmp.size[1]*4 dib.draw (hDC.GetHandleOutput (),(x1,y1,x2,y2)) hDC.EndPage () hDC.EndDoc () hDC.DeleteDC ()
4、python chrome呼叫列印的樣例
python selenium 控制chrome 呼叫列印的時候會找不到元素,控制不到的情況
# 點選列印 wait.until(ec.presence_of_element_located((By.LINK_TEXT,"列印"))).click() # 父視窗 類名: Chrome_WidgetWin_1 標題: 中行網銀(香港) - Google Chrome father = win32gui.FindWindow(None,'中行網銀(香港) - Google Chrome') # 子視窗 類名: Chrome_RenderWidgetHostHWND 標題: Chrome Legacy Window son = win32gui.FindWindowEx(father,None,"Chrome_RenderWidgetHostHWND",'Chrome Legacy Window') # 設定為最前視窗 win32gui.SetForegroundWindow(son) time.sleep(1) # ctrl+P win32api.keybd_event(17,0) win32api.keybd_event(80,0) win32api.keybd_event(17,win32con.KEYEVENTF_KEYUP,0) time.sleep(1) # ctrl+shift+P win32api.keybd_event(17,0) win32api.keybd_event(16,0) time.sleep(1) # 傳送回車-確認列印 win32api.keybd_event(13,0) win32api.keybd_event(13,0) time.sleep(1) # 關閉子視窗 windows = browser.window_handles browser.switch_to.window(windows[1]) wait.until(ec.presence_of_element_located((By.NAME,"close"))).click() # 切回父視窗 browser.switch_to.window(windows[0]) print(browser.page_source) # 點選返回 wait.until(ec.presence_of_element_located((By.LINK_TEXT,"返回"))).click() print("print end")
另一種方法,呼叫pdf列印,程式碼如下:
import win32api import os import json #PRINTER_NAME = '\\\\cnsz02vw00397\\CM_Printer_1' #PRINTER_NAME = 'Xerox Phaser 3435 PCL 6' def print_pdf(pdf_file_name): with open(os.getcwd() + "\\config_generate.json","r",encoding="utf-8") as f: json_data = json.load(f) PRINTER_MACHINE = json_data["print_machine"] f.close() PRINTER_NAME = PRINTER_MACHINE """ 靜默列印pdf :param pdf_file_name: :return: """ GHOSTSCRIPT_PATH = os.getcwd() + '\\GHOSTSCRIPT\\bin\\gswin32c' print(GHOSTSCRIPT_PATH) #currentprinter = config.printerName currentprinter = PRINTER_NAME # currentprinter = win32print.GetDefaultPrinter() arg = '-dPrinted ' \ '-dBATCH ' \ '-dNOPAUSE ' \ '-dNOSAFER ' \ '-dFitPage ' \ '-dNORANGEPAGESIZE ' \ '-q ' \ '-dNumCopies=1 ' \ '-sDEVICE=mswinpr2 ' \ '-sOutputFile="\\\\spool\\' \ + currentprinter +"\""+ " " + \ pdf_file_name #log.info(arg) win32api.ShellExecute( 0,\ 'open',\ GHOSTSCRIPT_PATH,\ arg,\ ".",0 ) if __name__ == '__main__': aaa = 'D:\\tempFile\\2019-09-12\\pay\\print.pdf' print_pdf(aaa)
這裡就差不多了