这里的需求是用户在某个网页下单之后,需要打印机打出票据。
实现:用python访问一个网络接口获取需要打印的数据(json格式),之后调用系统win32print的打印接口打印出来。
再用Tkinter写一个桌面程序可以用来提醒并可以使程序长久运行。
之后再用py2exe把python文件变成一个exe文件方便在后台执行。
#coding:utf-8 #python2.7 #引入需要的库 from tkMessageBox import * from Tkinter import * import hashlib import urllib2 import json import win32ui import win32print import win32con import time import socket #定义打印机,获取内容,定义样式,打印 def send_to_printer(title,txt,txt1,txt2,txt3,txt4,txt5): hDC = win32ui.CreateDC() hDC.CreatePrinterDC(win32print.GetDefaultPrinter()) hDC.StartDoc(title) hDC.StartPage() hDC.SetMapMode(win32con.MM_TWIPS) #定义位置 ulc_x = 1000 lrc_x = 11500 lrc_y = -11500 ulc_y = -100 hDC.DrawText(txt,(ulc_x,ulc_y,lrc_x,lrc_y),win32con.DT_LEFT) ulc_x = 100 ulc_y = -400 hDC.DrawText(txt1,(ulc_x,ulc_y,lrc_x,lrc_y),win32con.DT_LEFT) ulc_x = 100 ulc_y = -2300 hDC.DrawText(txt1,(ulc_x,ulc_y,lrc_x,lrc_y),win32con.DT_LEFT) ulc_x = 150 ulc_y = -700 hDC.DrawText(txt2,(ulc_x,ulc_y,lrc_x,lrc_y),win32con.DT_LEFT) ulc_x = 150 ulc_y = -1000 hDC.DrawText(txt3,(ulc_x,ulc_y,lrc_x,lrc_y),win32con.DT_LEFT) #修改字体大小 font = win32ui.CreateFont({ "name": "Lucida Console", "height": 400, "weight": 400, }) hDC.SelectObject(font) ulc_x = 150 ulc_y = -1400 hDC.DrawText(txt4,(ulc_x,ulc_y,lrc_x,lrc_y),win32con.DT_LEFT) ulc_x = 150 ulc_y = -1800 hDC.DrawText(txt5,(ulc_x,ulc_y,lrc_x,lrc_y),win32con.DT_LEFT) hDC.EndPage() hDC.EndDoc() #开一个桌面程序,提醒并在后台运行 root = Tk() #设置socket超时时间 socket.setdefaulttimeout(20) showinfo('信息', '打印机已成功运行') root.destroy() #下面轮询调用接口并处理数据,导入打印 while 1: #捕获所有错误,使中间不会中断 try: #调用接口获取json并处理 response = urllib2.urlopen('http://test.com') ret = response.read() #print ret res=json.loads(ret) #处理数据这部分自定义 txt="1";txt2="2";txt3="3";txt4="4";txt5="5" send_to_printer("title",txt,txt1,txt2,txt3,txt4,txt5) response.close() #5秒调用一次 time.sleep(5) except Exception,e: #错误处理,可以打印在log上,这里只简单的捕获 print Exception,":",e
from distutils.core import setup import py2exe #filename是上面写的那个python文件的文件名 setup(windows=["filename.py"])
把两个文件放在同目录下,用shift+右键,在此处打开命令行,运行
python setup.py py2exe
在产生的dist文件夹里有相同文件名的exe文件,可以双击直接执行,会先报一个成功运行,之后就在后台运行。
因为他会在后台一直运行着,所以关闭的话也得到任务管理器->进程里找到那个文件名的exe后台进程,把它结束掉就行。
版权声明:本文为原创文章,转载请注明出处和作者,不得用于商业用途,请遵守
CC BY-NC-SA 4.0协议。
赞赏一下