我们有一个博物馆展览,在入口处有一台计算机,驱动两个小收据打印机.控制台上有两个按钮,连接到开窗鼠标的左右按钮.这两个打印机和相关按钮适用于女孩和男孩,每个按钮从名称数据库中随机选择,并在适当的打印机上打印一张带有图形图像的小票,一些关于展览的文字和随机选择的名称.
概念上一切都很好,但它经常挂起.我在最后一分钟得到了这个项目,因为最初的设计师陷入困境并无法交付,所以展览的作者在开幕前一天问我,我是否可以写一些有用的东西.
我用Word做过,因为我是一位经验丰富的VBA程序员.我尝试的其他几个途径都导致死胡同 – 一个不能做图形,另一个不能处理两个打印机,另一个不能改变字体等等.问题是它根本不够快 – Word一次只能驱动一台打印机,而更换活动打印机需要很长时间.不是办公室标准,在打印机开始处理文档之前的第二个或两个延迟不是问题,但在这里我需要或多或少的即时响应.如果孩子按下按钮并且没有任何反应,他们会一遍又一遍地按下它直到确实发生了某些事情,导致在打印机开始反应之前可能发送了6个命令.有时它完全堵塞程序,因为男孩和女孩将同时按下两个按钮并且Word锁定,即使它没有卡住,打印机也会吐出一串票,弄得一团糟.孩子们开始争吵哪张票是哪张票,把它们从打印机中拿出来,咆哮纸带,堵塞打印机,一般搞乱了整个事件,往往需要展览管理员不得不重新启动计算机并清除撕碎的碎片.纸张打印机.
我需要的是某种快速编程语言可以驱动两台打印机* – 同时 – *,而不是必须切换活动打印机的MSOffice claptrap,它可以对鼠标左键和右键单击事件作出反应,可以打印一个小的图形图像,可以打印不同的字体大小和样式.我不需要很多,但它不是一个字体.
任何人都可以建议我可以用于此吗?我甚至不知道在Windows下是否可能,“单一活动打印机”垃圾是Office工件还是Windows限制.二十五年前,我的小Commodore-64有两台打印机连接在一起,并且没有任何困难同时驱动它们 – 在我看来它今天不应该是如此不可能的要求.
你需要:
>安装Python.
>安装Python for Windows Extensions.
>安装PIL.
>安装MSWinPrint.
然后,您需要编写一个程序来进行打印.像下面这样的东西.
#python import sys import Image,ImageWin import MSWinPrint # workaround for PIL namespace change MSWinPrint.ImageWin = ImageWin def print_name(name,printer_name): doc = MSWinPrint.document(printer_name) doc.begin_document('naMetag for %s' % name) # print the name at position 20,20 text_pos = 20,20 doc.text(text_pos,name) # add an image for this person img_pos = 40,40 img_size = 100,100 doc.image(img_pos,get_image(),img_size) doc.end_document() def get_image(): image_filename = 'my image.jpg' return Image.open(image_filename) if __name__ == '__main__': name,printer_name = sys.argv[1:] print_name(name,printer_name)
如果将其保存为print_tag.py,则可以使用两个命令行参数,要打印的名称和图像文件名来执行它.
print_tag.py Sally "EPSON Artisan 810"
我运行了这段代码,效果很好.我不知道创建自定义打印作业可能很容易.
您当然可以根据需要随意在任意数量的打印机上运行程序.当你运行打印作业的方式时,你可以做更多的事情来定制.您可以自定义代码以始终运行并解释鼠标单击(为此您可能需要wxPython),或者您可能有另一个程序只执行脚本.