<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      瀏覽器批量打印條碼紙

            前兩天遇到了一個需要瀏覽器打印條碼的需求,因為目前的管理系統是基于B/S的,在生產管理員用戶那里需要將訂單轉為生產指令單,與此同時需要將訂單中的產品批量打印出來條碼紙來,以便生產完畢后貼到產品上面方便掃碼入庫和標注產品。      

           先從打印機開始

          提供給我的是一臺科誠打印機G500,實際使用效果還不錯。目前很多的條碼打印機廠商提供了可視化的條碼打印軟件,可以直接打印出來條碼,還可以生成相應的EZPL指令,方便開發者使用指令來開發條碼打印,當然還提供了基礎的二次開發包和文檔。

         下圖是科誠官網下載的GO-LABLE打印設計軟件。

      使用非常簡單,擺弄一會兒就明白怎么玩了,這款打印軟件提供了基礎的條碼圖形,文字和圖像圖形工具,拖動到設計界面即可,這里需要注意的是,在使用字體的時候有兩種可以選擇,一種是打印機內建字體,一種是windows字體,如果你條碼上的文字不需要改變了,那就建議使用windows字體,這樣打印出來的文字清晰度很高,如果文字需要動態改變,比如我遇到的這個需求,那么就必須使用內建字體了,雙擊條碼上的文字,會出現文字設定:

      這里我選擇了亞洲字體,使用前需要先下載亞洲字體到打印機,其實就是把本機的中文字體下載到打印機。其他的文字來源我試過了,但是只有這個選項可以打印出來中文而不出現亂碼。

      設計完成后,我們可以輸出指令到右面的命令視窗,多觀察一下,你會發現其實這就是按照一定的規則生產的一串配置信息,告訴打印機紙張的大小信息,要出現一個什么樣的圖像,什么文本的文字,文字的字體類型,以及所有的這些元素的位置坐標信息,有了這些信息,打印機便可以按照要求輸出打印圖像了。我們可以試著改變命令窗口的信息,然后輸入回到設計界面,你就會發現設計效果已經按照你的修改發生了改變。

      大家可能已經發現了,我在所有需要動態更改的地方,用@+相應的字段表示,目的就是為了以此為模板,通過替換模版的元素達到動態輸出的效果。

      這里著重講一下二維碼配置信息

      W30,22,5,2,M,8,10,5,0
      @單號

      其中“@單號”是二維碼的文本信息,上面配置信息倒數第二個,也就是那個“5”,是二維碼信息的長度,,一個中文是兩個字節,所以“@單號”的長度就是5了,如果文本信息換成其他的了,這里的“5”,也要做相應的改變。

      制作ActiveX控件

      如果是做成winform,程序,那應該說是非常的簡單了,直接調用提供的dll就行了,可現在要求在瀏覽器中完成這個任務,瀏覽器想調用dll,那就得用的ActiveX控件了。關于ActiveX控件的開發和安裝部署,網上有一些教程,其實和做winform差不多,只是添加一下guid,修改一下控件屬性就行了,真的是非常方便。下面把核心代碼貼出來

      //Trace.dll是官方提供的,放到bin文件夾下面
      [DllImport("Trace.dll")] public static extern void sendcommand( [MarshalAs(UnmanagedType.LPArray)] byte[] command); public void printdata(string danhao,string kehu,string guige,string houdu,string yanse,string kuandu,string gaodu,string pingmi) {
      //獲取程序集的文件夾目錄,也就是安裝后控件程序集所在的目錄 string sApplicationPath = Assembly.GetExecutingAssembly().Location;
      //找到Data.cmd,這里是命令窗口中生成的那些指令信息,放到bin文件下,安裝程序會把控件的dll和這個Data.cmd一起打包輸出,這里就要求安裝程//序務必吧Data.cmd包含進去。如果是調試狀態,程序或到obj/debug文件下尋找Data.cmd,所以為了調試不出錯,也放到那里一份Data.cmd sApplicationPath = sApplicationPath.Replace("CodexPrint.dll","Data.cmd"); using (StreamReader sr = new StreamReader(sApplicationPath, Encoding.GetEncoding("GB2312"))) { StringBuilder sb = new StringBuilder(); string sLine = ""; while (sLine != null) { sLine = sr.ReadLine(); if (sLine != null && !sLine.Equals("")) {
      //特別要注意必須每次讀一行后添加上換行符,否則待會還原成字節數組的時候發給打印機,打印機不懂你在講什么 sLine += Environment.NewLine; sb.Append(sLine); } } sr.Close();
      //去除空的部分 string temp = sb.ToString().Trim(); //獲取單號的字節長度,替換"@單號"的長度5,一個漢字兩個長度 string erweimapeizhixinxi=temp.Substring(temp.IndexOf("W30"),(temp.LastIndexOf("@單號") -temp.IndexOf("W30") -1)); string[] arraytemp=erweimapeizhixinxi.Split(new char[]{','}); arraytemp[arraytemp.Length - 2] = Encoding.GetEncoding("GB2312").GetBytes(danhao ).Length.ToString(); temp = temp.Replace(erweimapeizhixinxi,string.Join(",",arraytemp)); //開始替換數據 temp = temp.Replace("@單號", danhao); temp = temp.Replace("@客戶", kehu); temp = temp.Replace("@規格", guige); temp = temp.Replace("@厚度", houdu); temp = temp.Replace("@顏色", yanse); temp = temp.Replace("@寬度", kuandu); temp = temp.Replace("@高度", gaodu); temp = temp.Replace("@平米", pingmi); byte[] buffer = Encoding.GetEncoding("GB2312").GetBytes(temp); openport("6"); //Ex:USB try { sendcommand(buffer); closeport(); } catch (Exception error) { MessageBox.Show(error.Message); return; } } }

      這樣ActiveX控件的開發就基本完成了,然后就可以在PC安裝了,類似工行網站在使用之前必須安裝控件一樣。

      頁面使用

      ActiveX控件安裝完畢后,頁面的使用就簡單了

      <object id="BarCodePrint" classid="clsid:你開發控件的時候設定的那個guid,這樣就可以與安裝的控件對應起來了"></object>
      <input type="button" onclick="startprint()" value="打印表中數據" />

      在startprint方法里,我們可以通過js來調用控件中的printdata方法了。這里我循環了表格中的數據,然后逐行打印

       <script type="text/javascript">
           function startprint() {
               var p = document.getElementById("BarCodePrint");
               var tableObj = document.getElementById("data");
               for (var i = 1; i < tableObj.rows.length; i++) {
                   var rowcells = tableObj.rows[i].cells;
                   var jsondata = { "danhao": rowcells[0].innerHTML, "kehu": rowcells[11].innerHTML, "guige": rowcells[1].innerHTML + rowcells[2].innerHTML,
                       "yanse": rowcells[3].innerHTML, "houdu": rowcells[4].innerHTML, "kuandu": rowcells[5].innerHTML, "gaodu": rowcells[6].innerHTML,
                       "pingmi": rowcells[10].innerHTML
                   };
                  //也可以省去定義json的過程,直接將數據傳入下面的方法
                  p.printdata(jsondata.danhao, jsondata.kehu, jsondata.guige, jsondata.houdu, jsondata.yanse, jsondata.kuandu, jsondata.gaodu, jsondata.pingmi);           
               }
                           
           }      
           
          </script>

      這樣整個工作就完成了,實測效果良好。ActiveX控件只能在IE下使用,谷歌瀏覽器還得使用其他插件配合,不過作為生產環節上的一環,要求工作人員使用IE就行了,呵呵。如果有一天突然想改變標簽上的布局了,那么在GO-LABLE中重新設計好后生成新的指令,找到ActiveX控件的安裝目錄,找到Data.cmd,替換掉原來的的指令就可以了。但是這里面的模版替換元素必須形式一樣,而且不能增加新的字段,如果增加的話,那就得重新開發升級ActiveX控件了。其實還有更靈活的方法,比如只傳入方法一個字符串,里面包含了需要替換的標簽和標簽數據,通過分隔符區分,比如“@單號:0000001|@顏色:紅色|.........”,然后進行字符串處理就行了。當然頁面的調用形式也相應做出改變就行。

      posted @ 2013-12-03 11:51  鄭某  閱讀(5996)  評論(8)    收藏  舉報
      主站蜘蛛池模板: 精品在免费线中文字幕久久| 国产在线精品一区二区三区| 潮喷失禁大喷水无码| 久久国产乱子伦免费精品无码| 性色av无码久久一区二区三区| 成人国产精品日本在线观看| 欧美大屁股喷潮水xxxx| 波多野结衣一区二区三区高清av| 在线成人| 中文字幕亚洲综合第一页| 天天做天天爱夜夜爽女人爽| 国产精品亚洲二区在线播放| 国产精品中文字幕第一页| 亚洲中文久久久精品无码| 水蜜桃视频在线观看免费18| 亚洲成a人片在线观看中| 亚洲国产成人精品综合色| 伊人天天久大香线蕉av色| 无套内射极品少妇chinese| 亚洲精品国产精品乱码不| 女同亚洲精品一区二区三| 69精品丰满人妻无码视频a片| 欧美性猛交xxxx乱大交极品| 中文字幕久区久久中文字幕| 妺妺窝人体色WWW看人体| 国产 麻豆 日韩 欧美 久久| 国产精品亚洲一区二区在| 久久精品人人做人人爽97| 欧美激情 亚洲 在线| 婷婷开心深爱五月天播播| 亚洲精品一区国产精品| 国语精品国内自产视频| 少妇xxxxx性开放| 精品人妻av区乱码| 久久精品国产亚洲不AV麻豆| 亚洲日本欧美日韩中文字幕| 欧洲亚洲精品免费二区| 2021国产成人精品久久| 好硬好湿好爽好深视频| 97久久超碰精品视觉盛宴| 色爱综合另类图片av|