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实现的二维码生成小软件
Jul 11 Python
python循环监控远程端口的方法
Mar 14 Python
Python中使用插入排序算法的简单分析与代码示例
May 04 Python
CentOS下使用yum安装python-pip失败的完美解决方法
Aug 16 Python
python 剪切移动文件的实现代码
Aug 02 Python
python画图--输出指定像素点的颜色值方法
Jul 03 Python
基于python操作ES实例详解
Nov 16 Python
python torch.utils.data.DataLoader使用方法
Apr 02 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
Apr 17 Python
如何学习Python time模块
Jun 03 Python
Python如何输出百分比
Jul 31 Python
python中字典增加和删除使用方法
Sep 30 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
CI框架安全类Security.php源码分析
2014/11/04 PHP
详解PHP中foreach的用法和实例
2016/10/25 PHP
php中文语义分析实现方法示例
2019/09/28 PHP
thinkphp5.1 框架钩子和行为用法实例分析
2020/05/25 PHP
JavaScript 一道字符串分解的题目
2011/08/03 Javascript
javascript返回顶部效果(自写代码)
2013/01/06 Javascript
jquery select动态加载选择(兼容各种浏览器)
2013/02/01 Javascript
让ie6也支持websocket采用flash封装实现
2013/02/18 Javascript
js数组Array sort方法使用深入分析
2013/02/21 Javascript
js给dropdownlist添加选项的小例子
2013/03/04 Javascript
js跑马灯代码(自写)
2013/04/17 Javascript
JavaScript中用字面量创建对象介绍
2014/12/31 Javascript
在JavaScript中使用NaN值的方法
2015/06/05 Javascript
js自制图片放大镜功能
2017/01/24 Javascript
AngularJS实现路由实例
2017/02/12 Javascript
详解vue与后端数据交互(ajax):vue-resource
2017/03/16 Javascript
Javascript 实现匿名递归的实例代码
2017/05/25 Javascript
详解通过JSON数据使用VUE.JS
2017/05/26 Javascript
iview tabs 顶部导航栏和模块切换栏的示例代码
2019/03/04 Javascript
微信小程序 点击切换样式scroll-view实现代码实例
2019/10/11 Javascript
[00:08]DOTA2勇士令状等级奖励“天外飞星”
2019/05/24 DOTA
用Python实现换行符转换的脚本的教程
2015/04/16 Python
简单介绍Python中的round()方法
2015/05/15 Python
收藏整理的一些Python常用方法和技巧
2015/05/18 Python
python利用高阶函数实现剪枝函数
2018/03/20 Python
python try except 捕获所有异常的实例
2018/10/18 Python
Python检查和同步本地时间(北京时间)的实现方法
2018/12/03 Python
在Python中如何传递任意数量的实参的示例代码
2019/03/21 Python
Python学习笔记之函数的定义和作用域实例详解
2019/08/13 Python
pyspark 随机森林的实现
2020/04/24 Python
pyMySQL SQL语句传参问题,单个参数或多个参数说明
2020/06/06 Python
Aveda美国官网:天然护发产品、洗发水、护发素和沙龙
2016/12/09 全球购物
杭州联环马网络笔试题面试题
2013/08/04 面试题
Linux如何修改文件和文件夹的权限
2013/09/05 面试题
自荐书模板
2013/12/19 职场文书
幼儿园安全责任书
2014/04/14 职场文书