多台打印机同时打印

问题描述:后台系统的多单单据需要各自对应不同的打印机,并且同时打印(LQ-690K 2台,hp激光打印2台)。

  一开始的功能是直接在各个单据的页面上直接放置打印按钮来打印,最终提出的需求是为了节约时间,提高打印速度,要多台打印机同时连接电脑,每台对应一种单据,同时打印。

  后台是基于j2ee的,web打印方式也就那几种,一是用js,二就是用控件。初始的打印按钮使用window.print()来打印,已经满足不了要求,需要有新的方式来实现.中间走了许多弯路,现在将过程中一些思路整理了下:

  1、想控制多台打印机,只好在客户端电脑放置一个java程序,使用java的打印api,从服务器获取html内容输出到打印机,但是查看java打印api的使用,很多都局限于对2d图形的打印(查了很多资料实现不了对html,pdf的直接打印)。

  2、中间试图用js存储html到本地,转成pdf打印,最后发现对于分页,打印都是有问题。

  时间有限,最后回来最初的选择上来,js打印基本是不用指望了,那就控件了,一开始没有使用控件是打个打印觉得没必要买控件(大部分功能完善点的都要收费吧)。不过这时候有需要只好找一个,杰表看了貌似有点贵,最后选Lodop来,暂时是会输出一行水印。

  

  最终的思路就是调用控件针对不同的URL,分别指定到指定序号的打印机打印。考虑到如果有多个地方使用,所以序号的指定放到客户端电脑了。将打印机序号写到一个文本文件中,页面上使用js来读取打印机序号。

  

//获取本地txt文件内容
function getPrinter(){    
    var fso, tf; 
    fso = new ActiveXObject("Scripting.FileSystemObject");     
    tf = fso.OpenTextFile("c://printer.txt",1);   
    var content = "";  
    if(!tf.AtEndOfStream)   {
        content =tf.ReadAll(); 
    }
    tf.Close();     
    return content;     
} 
//打印函数
function order(){
    var c = getPrinter();
    var arr = c.split(",");
    var index = arr[2]
    if(LODOP.SET_PRINTER_INDEX(index)){
        LODOP.SET_PRINT_PAGESIZE(1,0,0,"A4");    
        LODOP.ADD_PRINT_URL("2.5cm",15,"20.2cm","100%","${basePath }order.do?method=orderPackagePrintBatch&poid=${tPickingOrder.id}");
        LODOP.PRINT();    
    }
}

 

 

  基本实现了预期的功能。(唯一存在的问题是,现场反馈的针式打印机经常要重启才能打印,查一下,估计是usb供电问题)

posted @ 2012-09-02 22:03  飛天大盜  阅读(4656)  评论(0编辑  收藏  举报