多台打印機同時打印


問題描述:后台系統的多單單據需要各自對應不同的打印機,並且同時打印(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供電問題)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM