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启动办公软件进程(word、excel、ppt、以及wps的et、wps、wpp)
Apr 09 Python
用Python的Flask框架结合MySQL写一个内存监控程序
Nov 07 Python
python 转换 Javascript %u 字符串为python unicode的代码
Sep 06 Python
python3使用SMTP发送HTML格式邮件
Jun 19 Python
python如何实现一个刷网页小程序
Nov 27 Python
Django之提交表单与前后端交互的方法
Jul 19 Python
python PyAutoGUI 模拟鼠标键盘操作和截屏功能
Aug 04 Python
Python使用configparser库读取配置文件
Feb 22 Python
Python爬虫程序架构和运行流程原理解析
Mar 09 Python
opencv中图像叠加/图像融合/按位操作的实现
Apr 01 Python
Keras 使用 Lambda层详解
Jun 10 Python
tensorflow基于CNN实战mnist手写识别(小白必看)
Jul 20 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中文URL编解码(urlencode()rawurlencode()
2010/07/03 PHP
php定义一个参数带有默认值的函数实例分析
2015/03/16 PHP
php采集中国代理服务器网的方法
2015/06/16 PHP
Symfony生成二维码的方法
2016/02/04 PHP
[原创]php正则删除img标签的方法示例
2017/05/27 PHP
PHP自定义函数实现数组比较功能示例
2017/10/19 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
转自Jquery官方 jQuery1.1.3发布,速度提升800%,体积保持20K
2007/08/19 Javascript
对jQuery的事件绑定的一些思考(补充)
2013/04/20 Javascript
SuperSlide2实现图片滚动特效
2014/06/20 Javascript
node.js中的fs.lchownSync方法使用说明
2014/12/16 Javascript
jQuery实现的背景动态变化导航菜单效果
2015/08/24 Javascript
jQuery满屏焦点图左右滚动特效代码分享
2015/09/07 Javascript
JS两种类型的表单提交方法实例分析
2016/11/28 Javascript
jQuery实现遮罩层登录对话框
2016/12/29 Javascript
谈谈JavaScript数组常用方法总结
2017/01/24 Javascript
angular十大常见问题
2017/03/07 Javascript
JavaScript获取URL参数的方法之一
2017/03/24 Javascript
JavaScript基于replace+正则实现ES6的字符串模版功能
2017/04/25 Javascript
浅谈v-for 和 v-if 并用时筛选条件方法
2019/11/07 Javascript
[02:28]DOTA2英雄基础教程 狼人
2013/12/23 DOTA
python支持断点续传的多线程下载示例
2014/01/16 Python
Python即时网络爬虫项目启动说明详解
2018/02/23 Python
Django REST framework 如何实现内置访问频率控制
2019/07/23 Python
pyftplib中文乱码问题解决方案
2020/01/11 Python
常用UNIX 命令(Linux的常用命令)
2015/12/26 面试题
中药专业大学生医药工作求职信
2013/10/25 职场文书
药品采购员岗位职责
2014/02/08 职场文书
小学一年级评语大全
2014/04/22 职场文书
2014年文员工作总结
2014/11/18 职场文书
实习单位指导教师评语
2014/12/30 职场文书
2015年银行客户经理工作总结
2015/04/01 职场文书
学生党支部工作总结2015
2015/05/26 职场文书
昆虫记读书笔记
2015/06/26 职场文书
初中教务主任竞聘演讲稿(范文)
2019/08/20 职场文书
MySQL开启事务的方式
2021/06/26 MySQL