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, 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)

这里就差不多了

(0)

相关推荐

  • python连接打印机实现打印文档、图片、pdf文件等功能

    引言 python连接打印机进行打印,可能根据需求的不同,使用不同的函数模块. 如果你只是简单的想打印文档,比如office文档,你可以使用ShellExecute方法,对于微软office的文档.pdf.txt等有用,你可以尝试下: 如果你输入某些数据,文字信息,就想直接把它发送给打印机打印,那么可以尝试使用win32print: 如果你有一张图片,那么你可以结合python的Python Imaging Library(PIL)和win32ui模块进行打印: 普通打印 ShellExecut

  • 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 &qu

  • 通过python调用adb命令对App进行性能测试方式

    1 监听启动activity 信息命令adb shell logcat | grep START 可以查看apk包名和Activity名字 =========启动时间============ 2 冷启动(第一次启动)热启动(没有退出,第二次打开)命令 adb shell am start -W -n com.qihoo.appstore/.home.MainActivity 3 停止app命令(冷启动) adb shell am force-stop com.qihoo.appstore (热启

  • python调用DLL与EXE文件截屏对比分析

    目录 一.对比如下 二.综合选择 三.其它说明 想弄个截屏工具,整理一下学生错题什么的,原来用的方法是:先运行QQ,再监听键盘热键("ctrl+alt+a").后来发现有些问题:需要先上QQ,不能单独实现:监听时挂起, 查看增加了多个线程:键盘鼠标同时监听有难度,时间进度不好把握.现附加一个DLL文件,实现随时调用.网上查了一把,找到了几个可用文件. 一.对比如下 1.txgymailcamera.dll,文件大小:256K,界面友好,无放大镜. 2.cameradll.dll,文件大

  • python调用ffmpeg命令行工具便捷操作视频示例实现过程

    目录 最重要的事 裁剪视频 计算分段 获取视频长度 分段 获取文件 代码集成 总结 参考资料 文 | 李晓飞 来源:Python 技术「ID: pythonall」 最近有了一个新任务,需要将赛事视频,拆分成两分钟以内的小段,用于发布到短视频平台上. 本以为是个一次性的工作,结果赛事视频数据巨大,视频文件长短不一,完全没法手工处理,于是 Python 又一次拯救了我. 还等什么,开始干吧! 最重要的事 无论做什么事情,都要去分析一下最重要的是什么,然后集中精力攻克,再继续找最重要的事. 对我们这

  • python在windows命令行下输出彩色文字的方法

    本文实例讲述了python在windows命令行下输出彩色文字的方法.分享给大家供大家参考.具体分析如下: 默认情况下python在控制台输出的文字信息都是黑白的,如果能将文字做成彩色的输出,输出效果会更完美,也很酷,不是吗,下面是一段演示代码,这段代码封装了一个color类用来输出带颜色的文字,只要调用该类里面的相关方法就可以了,非常简单. 复制代码 代码如下: #!/usr/bin/env python #encoding: utf-8 import ctypes STD_INPUT_HAN

  • 用Python调用win命令行提高工作效率的实例

    作为程序猿,每天一上班打开电脑要做的时候就是打开各种工作所需的工具,如QQ,SQL Server,浏览器,编辑器等,每天都要一个个点,重复性的工作做多了也觉得烦(关键是影响了我上班倒水的时间). 于是就寻思着用python写一个简单的脚本来帮我一次性打开这些东西,解放我的双手,让我有时间去倒水. 环境是win10 64 Python3.6.5,使用到的模块是os,webbrowser. 其实实现的原理很简单,就是在相当于在win下的dos打开程序一样. 举个例子:如果我要打开我的qq. 在win

  • Python 调用 Windows API COM 新法

    Python中调用Win32API 通常都是使用 PyWin32或者ctypes.但要么依赖文件较多,要么用法繁琐. 这里介绍在Python中调用Win32 API 或者COM组件的另一个更好的,功能也更强大的解决方案. 首先需要确保安装的是 32位的Python(2.x 或者 3.x 均可). 下载通用库:win32exts for Python: https://github.com/tankaishuai/win32exts_for_Python 将win32exts.pyd 放入 Pyt

  • Python调用shell命令常用方法(4种)

    方法一.使用os模块的system方法:os.system(cmd),其返回值是shell指令运行后返回的状态码,int类型,0表示shell指令成功执行,256表示未找到,该方法适用于shell命令不需要输出内容的场景. 举例说明: 1. 列举当前目录下的所有文件. import os val = os.system('ls -al') print val 没有找到时,sh返回的状态码是1,而适用python调用,返回的是:256 方法二.使用os.popen(),该方法以文件的形式返回she

  • Linux下使用python调用top命令获得CPU利用率

    本文定位:想通过python调用top命令获取cpu使用率但暂时没有思路的情况. 如果单纯为了获得cpu的利用率,通过top命令重定向可以轻松实现,命令如下: 复制代码 代码如下: top -bi > cpuHistory.log 或 复制代码 代码如下: top -bi | tee  cpuHistory.log 这个就不解释了,不懂的朋友查询下top的帮助文档.这里要实现的是通过python调用top命令,并获得cpu的利用率信息. 用过popen的朋友很快就能想到类似如下的代码(这个是我第

  • python调用cmd命令行制作刷博器

    复制代码 代码如下: import webbrowser as webimport timeimport os count=0while count<10:    count=count+1    #你要刷的博客    web.open_new_tab("这里是博客地址")    time.sleep(1)else:    os.system('taskkill /F /IM  360se.exe') 这里主要学到三个知识点: 1.Python的线程原来是在time模块下 2.P

随机推荐