研究了一下午,希望對大家有幫助。

這招同樣適用於,想用網頁call cmd.exe做點事的人,
反正就是把動作寫在.bat裡,再run。

這個方法讓人體會到一件事,activeX好強大,根本是可怕,
如果下次有網頁問我要不要讓activeX動作,我真的會猶豫了。

***

//str --要變成QR code的字串
//qty --列印張數
//目的:在網頁上列印標籤(zebra)
//1.用javascript產生一文字檔在client電腦,內文如s
//2.用javascript產生一.bat檔,內文如s2,含列印指令
//3.用ActiveXObject('WSCRIPT.Shell') call bat檔,完成列印
function printOut(str,qty)
{
  if (str!="")
  {
    /*檔名*/
    var temp = "PrtMtlTxT";

    /*檔名及路徑*/
    var folder ="C:\\" + temp + ".txt";
    var folder_cmd ="C:\\print.bat";

    /*新增檔案*/
    var fso = new ActiveXObject("Scripting.FileSystemObject");
    var s = fso.CreateTextFile(folder, true);

    /*命令檔,利用cmd下列印指令*/
    var s2 = fso.CreateTextFile(folder_cmd, true);
    //com1是zebra印表機的連接port,目前是固定寫死    
    s2.WriteLine("COPY "+folder+" COM1");

    /*列印張數*/      
    var r = qty;

    /*日期*/
    var Today=new Date();
    var v_mon = eval(Today.getMonth()+1); //month回傳值為0-11表1-12月
    var v_date = Today.getFullYear()+"/"+v_mon+"/"+Today.getDate()+" "+Today.getHours()+":"+Today.getMinutes();

    /*寫入檔案*/
    for ( var k=1; k<=r; k++ )
    {
     /*開始*/
     s.WriteLine("^XA");
     /*起始點,LH(label home)原點座標*/
     s.WriteLine("^LH00,20^FS");
     /*內文,FO標籤座標,BQ:QR-code(AB:文字) N:不旋轉,FD後面接字串 */
     s.WriteLine("^FO50,20^BQN,1,3^FDQA,"+ str +"^FS");        
     /*內文,以字串顯示,並指定大小*/
     s.WriteLine("^FO50,230^AFN,26,13^FD"+ v_date +"^FS");
     s.WriteLine("^BY2,3.0,30^FS");              
     /*結束*/
     s.WriteLine("^XZ");  
    }

    /*關閉檔案*/
    s.Close();
    s2.Close();
    fso = null;

    /*列印檔案*/
    var run=new ActiveXObject('WSCRIPT.Shell').Run(folder_cmd);

  }
}
創作者介紹
創作者 amy70016 的頭像
amy70016

黑心小兔的金玉良言

amy70016 發表在 痞客邦 留言(0) 人氣()