Python调用Windows命令打印文件


Posted in Python onFebruary 07, 2020

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, 0, 0)
win32api.keybd_event(80, 0, 0, 0)
win32api.keybd_event(17, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(80, 0, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(1)
# ctrl+shift+P
win32api.keybd_event(17, 0, 0, 0)
win32api.keybd_event(16, 0, 0, 0)
win32api.keybd_event(80, 0, 0, 0)
win32api.keybd_event(17, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(16, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(80, 0, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(1)
# 发送回车-确认打印
win32api.keybd_event(13, 0, 0, 0)
win32api.keybd_event(13, 0, win32con.KEYEVENTF_KEYUP, 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)

这里就差不多了

Python 相关文章推荐
Python中使用dom模块生成XML文件示例
Apr 05 Python
Python使用QQ邮箱发送Email的方法实例
Feb 09 Python
PyTorch快速搭建神经网络及其保存提取方法详解
Apr 28 Python
利用python如何处理nc数据详解
May 23 Python
python编写简易聊天室实现局域网内聊天功能
Jul 28 Python
python实现连续图文识别
Dec 18 Python
Python使用pyshp库读取shapefile信息的方法
Dec 29 Python
在python带权重的列表中随机取值的方法
Jan 23 Python
python OpenCV GrabCut使用实例解析
Nov 11 Python
python实现超级玛丽游戏
Mar 18 Python
python实现贪吃蛇游戏源码
Mar 21 Python
Python CSS选择器爬取京东网商品信息过程解析
Jun 01 Python
python连接打印机实现打印文档、图片、pdf文件等功能
Feb 07 #Python
解决Keras 与 Tensorflow 版本之间的兼容性问题
Feb 07 #Python
tensorflow2.0与tensorflow1.0的性能区别介绍
Feb 07 #Python
python第三方库学习笔记
Feb 07 #Python
Python字典添加,删除,查询等相关操作方法详解
Feb 07 #Python
tensorflow之自定义神经网络层实例
Feb 07 #Python
在tensorflow中设置使用某一块GPU、多GPU、CPU的操作
Feb 07 #Python
You might like
可定制的PHP缩略图生成程式(需要GD库支持)
2007/03/06 PHP
用PHP读取和编写XML DOM的实现代码
2011/02/03 PHP
PHP+Mysql无刷新问答评论系统(源码)
2016/12/20 PHP
javascript不同页面传值的改进版
2008/09/30 Javascript
如何在JS中实现相互转换XML和JSON
2016/07/19 Javascript
详解NodeJs支付宝移动支付签名及验签
2017/01/06 NodeJs
JavaScript和jQuery制作光棒效果
2017/02/24 Javascript
JS简单实现数组去重的方法示例
2017/03/27 Javascript
纯js实现动态时间显示
2020/09/07 Javascript
Node.js搭建小程序后台服务
2018/01/03 Javascript
jQuery实现的手动拖动控制进度条效果示例【测试可用】
2018/04/18 jQuery
学习node.js 断言的使用详解
2019/03/18 Javascript
基于Element的组件改造的树形选择器(树形下拉框)
2020/02/27 Javascript
[03:17]2016完美“圣”典风云人物:冷冷专访
2016/12/08 DOTA
利用python求解物理学中的双弹簧质能系统详解
2017/09/29 Python
Random 在 Python 中的使用方法
2018/08/09 Python
解决pycharm运行出错,代码正确结果不显示的问题
2018/11/30 Python
Python学习笔记之文件的读写操作实例分析
2019/08/07 Python
python基础 range的用法解析
2019/08/23 Python
Python使用get_text()方法从大段html中提取文本的实例
2019/08/27 Python
Python 通过截图匹配原图中的位置(opencv)实例
2019/08/27 Python
python解析多层json操作示例
2019/12/30 Python
Python3 mmap内存映射文件示例解析
2020/03/23 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
2020/05/22 Python
PyTorch中model.zero_grad()和optimizer.zero_grad()用法
2020/06/24 Python
HTML5之HTML元素扩展(下)—增强的Form表单元素值得关注
2013/01/31 HTML / CSS
服装机修工岗位职责
2013/12/26 职场文书
幼儿园教师教学反思
2014/02/06 职场文书
小学评语大全
2014/04/22 职场文书
绿色家庭事迹材料
2014/05/01 职场文书
超市店庆活动方案
2014/08/31 职场文书
2014年“四风”问题个人整改措施
2014/09/17 职场文书
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
2021/06/13 Python
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
2022/04/06 Python
使用 MybatisPlus 连接 SqlServer 数据库解决 OFFSET 分页问题
2022/04/22 SQL Server
JS前端可扩展的低代码UI框架Sunmao使用详解
2022/07/23 Javascript