1. 程式人生 > 程式設計 >Python呼叫Windows命令列印檔案

Python呼叫Windows命令列印檔案

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)

這裡就差不多了