头一段时间一直在做针对证卡打印机程序的开发,现在快做完了,在这做个总结吧

    总共做过两个品牌的打印机:

    1、DataCard Cp60 Plus

    2、Evolis Dualys3 和 Evolis Quantum2

    第一次接触的是DataCard 的打印机,对两个品牌产品不做评价,做工都差不多吧,各有千秋,不过总体用料貌似DataCard的好点

    由于要用证卡打印机对智能卡(非接触卡)进行初始化与打印,这样就考虑了一下用什么语言开发的问题,由于初衷想做一个打印服务器,所以选择了JAVA Web程序开发,这样重用代码比较多,着手快。总体思路用C 根据 DataCard的开发库(厂商会提供)写一个动态链接库,提供操作打印机的接口,在java中通过jna调用动态链接库,实现java对打印机的操作。由于是Web程序,要把动态链接库放在程序的启动目录下,我放到了tomcat的bin目录下。对于智能卡模块来说,起初用的是PCSC协议的智能卡,跟打印机一样, 也是写一个动态链接库,通过jna调用。这样呢,在Windows下是可以畅通无阻了!

    可是呢,由于客户要求程序在linux下执行,DataCard官方美其名曰支持linux系统,世界上他们linux的技术支持到2007后就断了,系统也只支持到2007年后的版本,新版本系统由于内核原因,根本无法驱动,由于没有官方的驱动,只能把DataCard阉割掉了…………花费了很长时间写的程序啊……OMG

    之后就采购了Evolis的打印机,Evolis对linux的支持要好一点,虽然他们官网上的驱动是不能用的……不过单独管他们的技术支持要能得到一份最新的驱动,只支持Debian家族,不过还算不错了,不过他们给的开发库……曾经让我迷惑了很长时间……太底层了,让我一度很二的问了好多问题……,最终还是能正确使用了,把官方提供的工具改写一下,编译成动态链接库,OK,一样扔到JAVA里用jna调用,通过,打印机程序就这么的搞定了。

    接下来就考虑智能卡模块了,原来的用的PCSC的读卡器,由于Evolis 的读卡器不提供官方驱动……我自己用linux下的通用PCSC驱动始终没搞起来,相当之坎坷,最后项目工期临近,直接跟领导提议换成自己公司的读卡器,通过串口,之后拆拆卸卸的总是装上了,之后用通过程序直接给串口发指令实现智能卡的初始化了……太不容易了。最后呢程序整合,挂到linux运行,OK

    说起来挺容易的,实际做的时候问题除出了很多很多,有很多时候有一种想咬死技术支持的冲动。我觉得我现在比国内代理的那些技术支持对这两个品牌的软硬件理解都多了……自己动手丰衣足食啊……。

    说一下难点吧,windows下主要还是读官方文档,认真点,然后呢动态链接库编辑好了就问题不大了,其中要注意的就是字符编码的问题,这个因人而异吧,其中Evolis 打印机的固件中只有拉丁字符集,而且它不支持自定义字体,这点DataCard做的要好很多!但是也有变相的解决方案,就是打印之前把要打印的信息在程序中绘制成位图,然后直接打印图片!这个要做批量打印就比较麻烦了,还好我做的不是国内项目,最后通通的直接打印文字,效率更高!如果没有系统要求,还是比较推荐DataCard的打印机吧,当然批量打印的话Evolis的Quantum系列优先推荐,针对不同的需求开发不用的上层程序吧!还有呢对于智能卡模块来说,linux下串口发指令也是要注意的,不是那么简单的哦……

    接下来就说错误处理了,这两个品牌打印机的错误处理还是不同的,不过这些都可以开发者自定义了,其中DataCard打印机用户可以随时通讯去询问打印机状态。而Evolis则是每执行一条指令可以读指令是否成功,如果单纯的做单例程序,Evolis的指令结构更好,它是通过Escapt Command(Evo自己定义的)去执行操作的,对于程序猿来说更大范围内的可以自由发挥,官方SDK2上写的很清楚。

    大体上就说这么多吧,我底层程序搞定,上层的还没弄完,继续码农去了……希望本文能帮助到有需要的同仁们吧,有问题请留言