HardBirch

Java实现控制网口打印机并完成丢单重打机制

时间:11-10-26 栏目:安卓学习笔记 作者:张飞不张,文采横飞 评论:3 点击: 2,296 次

在餐饮行业中普遍使用的点菜等系统中,打印单子是一项最基本的功能。在餐饮中,一般采用的都是POS打印机。但是,在很多点菜系统中,丢单是一件很头痛的事情。本文就如何用java实现绕过驱动控制打印并实现丢单处理,给出一种解决办法。

本文面对的需求是,一个单据同时由多个打印机打印,当一个单据没有打印成功,则需要重新打印(补单)。将打印机连接到路由器并确定打印机正常后,便可以进行测试。

本文的实现思路是:采用队列和线程操作来完成。

本文建立几个对象:

1、打印机对象Printer:打印机编号,打印机IP,打印机端口,默认纸张宽度等

2、打印对象PrintableObject:封装需要打印的信息

3、打印作业对象PrintJob:封装一个PrintableObject对象,同时包含一个状态位,可能的状态有“等待打印”,“正在打印”,“完成打印”。同时含有一个print方法。

4、打印队列PrintQueue:单实例,模拟一个队列,其中的方法是线程安全的。每个元素是PrintJob对象,先进先出,打印失败,重新回到队列的尾部。

5、打印抓取对象PrintableTracker:该对象是一个线程,并且是单实例。不停地从PrintQueue中取PrintJob,打印成功,继续打印下一个;否则,将当前的移到队列的尾部,继续打印下一个。如果队列中没有PrintJob了,则结束。当再次添加PrintJob到PrintQueue中的时候,会启动线程继续打印。

6、PrintUtils:参考打印机自带的命令手册,封装打印命令,在PrintJob中的print方法中调用PrintUtils封装的命令进行打印。在print方法中,建立Socket连接,和打印机通信。

以上实现,在佳博热敏网口打印机下测试通过。解决因为网络问题或者打印机却纸等问题造成的丢单问题。但是,当打印命令已经传送到出去,而此时,打印机断电了,那么这个当来电时没法重新打印。因为在程序中,该操作实际上已经完成,但是这些命令是存在于网络或者打印机缓存中,断电后这些信息就不存在了。这是因为打印机无法判断打印机到底有没有出纸。至少从佳博的打印机命令手册上没有找到。但是,如果其他的打印机可以,那么就可以在Socket中,接收此状态来判断打印是否成功。这样,丢单的概率就更小了。

思路就是如此,仅供参考!

声明: 本文由( 张飞不张,文采横飞 )原创编译,转载请保留链接: Java实现控制网口打印机并完成丢单重打机制

Java实现控制网口打印机并完成丢单重打机制:目前有3 条留言

  1. 地板
    q251763233:

    请问LZ,我也正遇到这个问题
    能否给我个实例?谢谢
    541959443@qq.com

    2011-10-27 11:36 [回复]
  2. 板凳
    eric_fei:

    楼主,你好。我最近也遇到这个问题,能否跟你交流下,谢谢。MSN或者邮箱联系都可以,eric-fei@hotmail.com

    2012-03-27 16:00 [回复]
  3. 沙发
    ylz4647:

    楼主,你好,我也有同样的问题,能否给我个Demo,谢谢!
    caren888@163.com

    2012-06-03 22:41 [回复]

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐